Lv110版本源码上传
This commit is contained in:
@@ -0,0 +1,789 @@
|
||||
from copy import deepcopy
|
||||
import importlib
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
from decimal import Decimal
|
||||
from pyclbr import Function
|
||||
from typing import Dict, List
|
||||
from routers.database.db import Session,get_engine,EquData,EntryData,SuitData
|
||||
|
||||
try:
|
||||
os.chdir(os.path.dirname(sys.argv[0]))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def parse_to_number_list(info: str):
|
||||
return [] if info == "" or info is None else [int(i) for i in info.split(",")]
|
||||
|
||||
|
||||
def get_eq_info_data(version):
|
||||
# equ_info = {}
|
||||
# fileName = "./dataFiles/equ-data-{}.json".format(version)
|
||||
# try:
|
||||
# with open(fileName, encoding='utf-8') as fp:
|
||||
# equ_info = json.load(fp)
|
||||
# except Exception:
|
||||
# with open("./dataFiles/equ-data-3.json", encoding='utf-8') as fp:
|
||||
# equ_info = json.load(fp)
|
||||
equ_info = {}
|
||||
engine = get_engine(version)
|
||||
with Session(bind=engine) as session:
|
||||
for equ in session.query(EquData).all():
|
||||
equ.可选属性 = parse_to_number_list(equ.可选属性)
|
||||
equ.固有属性 = parse_to_number_list(equ.固有属性)
|
||||
equ.成长属性 = parse_to_number_list(equ.成长属性)
|
||||
equ.特性 = parse_to_number_list(equ.特性)
|
||||
equ.suits = parse_to_number_list(equ.suits)
|
||||
equ_info[str(equ.id)] = equ.__dict__
|
||||
for i in list(filter(lambda x: x.startswith("_"), equ.__dict__.keys())):
|
||||
del equ_info[str(equ.id)][i]
|
||||
engine.dispose()
|
||||
cus = []
|
||||
for key in equ_info.keys():
|
||||
if (('融合石' not in equ_info[key]["类型"]))and (len(equ_info[key]["可选属性"]) > 0):
|
||||
cus.append(key)
|
||||
for key in cus:
|
||||
equ_info[str(100000+int(key))] = deepcopy(equ_info[key])
|
||||
equ_info[str(100000+int(key))]["名称"] += " - 对照"
|
||||
# equ_info[str(10000+int(key))]["order"] += 100000
|
||||
return equ_info
|
||||
|
||||
|
||||
def get_suit_info_data(version):
|
||||
suit_info = []
|
||||
engine = get_engine(version)
|
||||
with Session(bind=engine) as session:
|
||||
for suit in session.query(SuitData).all():
|
||||
temp = suit.__dict__
|
||||
for i in list(filter(lambda x: x.startswith("_"), suit.__dict__.keys())):
|
||||
del temp[i]
|
||||
if temp['compatibility'] is None:
|
||||
temp['compatibility'] = []
|
||||
else:
|
||||
temp['compatibility'] = parse_to_number_list(
|
||||
temp['compatibility'])
|
||||
suit_info.append(temp)
|
||||
pass
|
||||
engine.dispose()
|
||||
return suit_info
|
||||
|
||||
|
||||
def get_entry_info_data(version):
|
||||
# entry_info = {}
|
||||
# fileName = "./dataFiles/entry-data-{}.json".format(version)
|
||||
# try:
|
||||
# with open(fileName, encoding='utf-8') as fp:
|
||||
# entry_info = json.load(fp)
|
||||
# except Exception:
|
||||
# with open("./dataFiles/entry-data-0.json", encoding='utf-8') as fp:
|
||||
# entry_info = json.load(fp)
|
||||
entry_info = {}
|
||||
engine = get_engine(version)
|
||||
with Session(bind=engine) as session:
|
||||
for entry in session.query(EntryData).all():
|
||||
entry_info[str(entry.id)] = entry.__dict__
|
||||
entry_info[str(entry.id)]["props"] = entry.props.split("<br/>")
|
||||
entry_info[str(entry.id)]["additional"] = json.loads(entry.additional) if entry.additional != "" and entry.additional is not None else []
|
||||
for i in list(filter(lambda x: x.startswith("_"), entry.__dict__.keys())):
|
||||
del entry_info[str(entry.id)][i]
|
||||
pass
|
||||
engine.dispose()
|
||||
# if int(version) == 0:
|
||||
for item in entry_info:
|
||||
props = entry_info[item]['props']
|
||||
if len(entry_info[item]['additional']) > 0:
|
||||
entry_info[item]["template"] = ("<br/>").join(entry_info[item]["props"])
|
||||
entry_info[item]["params"] = entry_info[item]['additional']
|
||||
props = ("<br/>").join(entry_info[item]["props"])
|
||||
for index,param in enumerate(entry_info[item]['additional'][0]):
|
||||
props = props.replace("{"+str(index)+"}",str(param))
|
||||
entry_info[item]["props"] = props.split("<br/>")
|
||||
else:
|
||||
import re
|
||||
res = re.findall(r'攻击强化[\s]\+\d+.?\d+%',
|
||||
("<br/>").join(props).replace(",", ""))
|
||||
|
||||
if len(res) > 0:
|
||||
params = []
|
||||
template = ("<br/>").join(props).replace(",", "")
|
||||
for index in range(0, len(res)):
|
||||
temp = res[index].replace("攻击强化+", "攻击强化 +")
|
||||
params.append(float(re.findall(r'\d+\.?\d*', temp)[0]))
|
||||
template = template.replace(temp, '攻击强化 {'+str(index)+'}')
|
||||
entry_info[item]["template"] = template
|
||||
entry_info[item]["params"] = params
|
||||
entry_info[item]["filter"] = entry_info[item].get("filter", None)
|
||||
|
||||
del entry_info[item]['additional']
|
||||
return entry_info
|
||||
|
||||
|
||||
class equipment:
|
||||
名称 = ''
|
||||
等级 = ''
|
||||
品质 = ''
|
||||
部位 = ''
|
||||
类型 = ''
|
||||
力量 = 0
|
||||
智力 = 0
|
||||
体力 = 0
|
||||
精神 = 0
|
||||
物理攻击力 = 0
|
||||
魔法攻击力 = 0
|
||||
独立攻击力 = 0
|
||||
固有属性 = []
|
||||
成长属性 = []
|
||||
可选属性 = []
|
||||
物理暴击率 = 0
|
||||
魔法暴击率 = 0
|
||||
神 = False
|
||||
id = 0
|
||||
suits = ''
|
||||
|
||||
def __init__(self, info={}):
|
||||
# 读取json获取装备属性
|
||||
self.__dict__.update(info)
|
||||
|
||||
# 计算防具转甲基础
|
||||
if self.类型 in ['布甲', '皮甲', '轻甲', '重甲', '板甲']:
|
||||
设置防具基础(self)
|
||||
if self.部位 == "武器":
|
||||
设置武器基础(self)
|
||||
if self.类型 in ['首饰', '特殊装备']:
|
||||
设置其他基础(self)
|
||||
# def __iter__(self):
|
||||
# yield from [getattr(self, i, 0) for i in ('物理攻击力', '魔法攻击力', '独立攻击力', '三攻', '力量', '智力', '力智', '体力', '精神', '体精', '四维', '物理暴击率', '魔法暴击率', '暴击率', '攻击速度', '施放速度', '移动速度', '三速')]
|
||||
|
||||
|
||||
防具基础 = {
|
||||
"105-史诗-上衣": (141, 141, 141, 141, 1597, 0),
|
||||
"105-史诗-头肩": (132, 132, 132, 132, 1065, 0),
|
||||
"105-史诗-下装": (141, 141, 141, 141, 1331, 0),
|
||||
"105-史诗-鞋": (124, 124, 124, 124, 799, 0),
|
||||
"105-史诗-腰带": (124, 124, 124, 124, 532, 0),
|
||||
"105-神话-上衣": (142, 142, 142, 142, 1637, 0),
|
||||
"105-传说-上衣": (140, 140, 140, 140, 1558, 0),
|
||||
"105-传说-头肩": (132, 132, 132, 132, 1038, 0),
|
||||
"105-传说-下装": (140, 140, 140, 140, 1298, 0),
|
||||
"105-传说-鞋": (124, 124, 124, 124, 779, 0),
|
||||
"105-传说-腰带": (124, 124, 124, 124, 519, 0),
|
||||
"110-史诗-上衣": (142, 142, 142, 142, 1663, 0),
|
||||
"110-史诗-头肩": (134, 134, 134, 134, 1109, 0),
|
||||
"110-史诗-下装": (142, 142, 142, 142, 1386, 0),
|
||||
"110-史诗-鞋": (125, 125, 125, 125, 832, 0),
|
||||
"110-史诗-腰带": (125, 125, 125, 125, 554, 0),
|
||||
}
|
||||
|
||||
|
||||
武器基础 = {
|
||||
"110-史诗-短剑": (0, 88, 0, 0, 1277, 1547, 864),
|
||||
"110-史诗-太刀": (88, 133, 0, 0, 1277, 1411, 864),
|
||||
"110-史诗-钝器": (133, 0, 0, 0, 1478, 1277, 864),
|
||||
"110-史诗-巨剑": (88, 0, 0, 0, 1614, 1210, 864),
|
||||
"110-史诗-光剑": (88, 0, 0, 0, 1251, 1210, 864),
|
||||
"110-史诗-手套": (0, 88, 0, 0, 1277, 1547, 864),
|
||||
"110-史诗-臂铠": (133, 0, 0, 0, 1614, 1210, 864),
|
||||
"110-史诗-爪": (88, 44, 0, 0, 1344, 1344, 864),
|
||||
"110-史诗-拳套": (88, 0, 0, 0, 1411, 1277, 864),
|
||||
"110-史诗-东方棍": (88, 133, 0, 0, 1277, 1344, 864),
|
||||
"110-史诗-左轮枪": (88, 0, 0, 0, 1362, 1145, 864),
|
||||
"110-史诗-自动手枪": (0, 88, 0, 0, 955, 1400, 864),
|
||||
"110-史诗-步枪": (88, 133, 0, 0, 1463, 1273, 864),
|
||||
"110-史诗-手炮": (133, 0, 0, 0, 1591, 955, 864),
|
||||
"110-史诗-手弩": (88, 88, 0, 0, 1145, 1273, 864),
|
||||
"110-史诗-矛": (133, 0, 0, 0, 1614, 1143, 864),
|
||||
"110-史诗-棍棒": (120, 120, 0, 0, 1452, 1210, 864),
|
||||
"110-史诗-魔杖": (0, 133, 0, 0, 1210, 1478, 864),
|
||||
"110-史诗-法杖": (0, 88, 0, 0, 1277, 1614, 864),
|
||||
"110-史诗-扫把": (0, 88, 0, 0, 1344, 1478, 864),
|
||||
"110-史诗-十字架": (0, 88, 106, 106, 1344, 1277, 864),
|
||||
"110-史诗-念珠": (0, 133, 0, 0, 1210, 1547, 864),
|
||||
"110-史诗-图腾": (133, 0, 0, 0, 1411, 1210, 864),
|
||||
"110-史诗-镰刀": (88, 88, 0, 0, 1277, 1344, 864),
|
||||
"110-史诗-战斧": (88, 0, 0, 0, 1614, 1143, 864),
|
||||
"110-史诗-匕首": (133, 0, 0, 0, 1283, 1210, 864),
|
||||
"110-史诗-双剑": (88, 0, 0, 0, 1474, 1076, 864),
|
||||
"110-史诗-手杖": (0, 88, 0, 0, 1196, 1547, 864),
|
||||
"110-史诗-苦无": (0, 133, 0, 0, 1133, 1478, 864),
|
||||
"110-史诗-长枪": (133, 0, 0, 0, 1411, 1210, 864),
|
||||
"110-史诗-战戟": (88, 0, 0, 0, 1614, 1143, 864),
|
||||
"110-史诗-光枪": (88, 88, 0, 0, 1277, 1547, 864),
|
||||
"110-史诗-暗矛": (88, 133, 0, 0, 1277, 1411, 864),
|
||||
"110-史诗-长刀": (88, 88, 0, 0, 1452, 1210, 864),
|
||||
"110-史诗-小太刀": (88, 44, 0, 0, 1344, 1344, 864),
|
||||
"110-史诗-重剑": (88, 0, 0, 0, 1614, 1210, 864),
|
||||
"110-史诗-源力剑": (0, 88, 0, 0, 1277, 1547, 864),
|
||||
"110-史诗-神弦弓": (0, 0, 0, 106, 1344, 1277, 864),
|
||||
"110-史诗-玄机弓": (88, 88, 0, 0, 1452, 1210, 864),
|
||||
"105-史诗-短剑": (0, 85, 0, 0, 1222, 1480, 818),
|
||||
"105-史诗-太刀": (85, 128, 0, 0, 1222, 1351, 818),
|
||||
"105-史诗-钝器": (128, 0, 0, 0, 1416, 1222, 818),
|
||||
"105-史诗-巨剑": (85, 0, 0, 0, 1544, 1158, 818),
|
||||
"105-史诗-光剑": (85, 0, 0, 0, 1197, 1158, 818),
|
||||
"105-史诗-手套": (0, 85, 0, 0, 1222, 1480, 818),
|
||||
"105-史诗-臂铠": (128, 0, 0, 0, 1544, 1158, 818),
|
||||
"105-史诗-爪": (85, 43, 0, 0, 1287, 1287, 818),
|
||||
"105-史诗-拳套": (85, 0, 0, 0, 1351, 1222, 818),
|
||||
"105-史诗-东方棍": (85, 128, 0, 0, 1222, 1287, 818),
|
||||
"105-史诗-左轮枪": (85, 0, 0, 0, 1300, 1093, 818),
|
||||
"105-史诗-自动手枪": (0, 85, 0, 0, 911, 1337, 818),
|
||||
"105-史诗-步枪": (85, 128, 0, 0, 1397, 1214, 818),
|
||||
"105-史诗-手炮": (128, 0, 0, 0, 1518, 911, 818),
|
||||
"105-史诗-手弩": (85, 85, 0, 0, 1093, 1214, 818),
|
||||
"105-史诗-矛": (128, 0, 0, 0, 1544, 1093, 818),
|
||||
"105-史诗-棍棒": (114, 114, 0, 0, 1389, 1158, 818),
|
||||
"105-史诗-魔杖": (0, 128, 0, 0, 1158, 1416, 818),
|
||||
"105-史诗-法杖": (0, 85, 0, 0, 1222, 1544, 818),
|
||||
"105-史诗-扫把": (0, 85, 0, 0, 1287, 1416, 818),
|
||||
"105-史诗-十字架": (0, 85, 101, 101, 1287, 1222, 818),
|
||||
"105-史诗-念珠": (0, 128, 0, 0, 1158, 1480, 818),
|
||||
"105-史诗-图腾": (128, 0, 0, 0, 1351, 1158, 818),
|
||||
"105-史诗-镰刀": (85, 85, 0, 0, 1222, 1287, 818),
|
||||
"105-史诗-战斧": (85, 0, 0, 0, 1544, 1093, 818),
|
||||
"105-史诗-匕首": (128, 0, 0, 0, 1224, 1158, 818),
|
||||
"105-史诗-双剑": (85, 0, 0, 0, 1408, 1030, 818),
|
||||
"105-史诗-手杖": (0, 85, 0, 0, 1141, 1480, 818),
|
||||
"105-史诗-苦无": (0, 128, 0, 0, 1081, 1416, 818),
|
||||
"105-史诗-长枪": (128, 0, 0, 0, 1351, 1158, 818),
|
||||
"105-史诗-战戟": (85, 0, 0, 0, 1544, 1093, 818),
|
||||
"105-史诗-光枪": (85, 85, 0, 0, 1222, 1480, 818),
|
||||
"105-史诗-暗矛": (85, 128, 0, 0, 1222, 1351, 818),
|
||||
"105-史诗-长刀": (85, 85, 0, 0, 1389, 1158, 818),
|
||||
"105-史诗-小太刀": (85, 43, 0, 0, 1287, 1287, 818),
|
||||
"105-史诗-重剑": (85, 0, 0, 0, 1544, 1158, 818),
|
||||
"105-史诗-源力剑": (0, 85, 0, 0, 1222, 1480, 818),
|
||||
"105-史诗-神弦弓": (0, 85, 0, 101, 1287, 1222, 818),
|
||||
"105-史诗-玄机弓": (85, 85, 0, 0, 1389, 1158, 818),
|
||||
# "105-史诗-神弦弓": (0, 0, 0, 101, 1287, 1222, 818),
|
||||
# "105-史诗-玄机弓": (0, 0, 0, 101, 1287, 1222, 818),
|
||||
"105-传说-短剑": (0, 81, 0, 0, 1167, 1412, 766),
|
||||
"105-传说-太刀": (81, 0, 0, 0, 1167, 1289, 766),
|
||||
"105-传说-钝器": (122, 0, 0, 0, 1351, 1167, 766),
|
||||
"105-传说-巨剑": (81, 122, 0, 0, 1474, 1106, 766),
|
||||
"105-传说-光剑": (81, 0, 0, 0, 1142, 1106, 766),
|
||||
"105-传说-手套": (0, 81, 0, 0, 1167, 1412, 766),
|
||||
"105-传说-臂铠": (122, 0, 0, 0, 1474, 1106, 766),
|
||||
"105-传说-爪": (81, 41, 0, 0, 1229, 1229, 766),
|
||||
"105-传说-拳套": (81, 0, 0, 0, 1289, 1167, 766),
|
||||
"105-传说-东方棍": (81, 122, 0, 0, 1167, 1229, 766),
|
||||
"105-传说-左轮枪": (81, 0, 0, 0, 1239, 1042, 766),
|
||||
"105-传说-自动手枪": (0, 81, 0, 0, 868, 1274, 766),
|
||||
"105-传说-步枪": (81, 122, 0, 0, 1331, 1157, 766),
|
||||
"105-传说-手炮": (122, 0, 0, 0, 1448, 868, 766),
|
||||
"105-传说-手弩": (81, 81, 0, 0, 1042, 1157, 766),
|
||||
"105-传说-矛": (110, 110, 0, 0, 1327, 1106, 766),
|
||||
"105-传说-棍棒": (122, 0, 0, 0, 1474, 1044, 766),
|
||||
"105-传说-魔杖": (0, 122, 0, 0, 1106, 1351, 766),
|
||||
"105-传说-法杖": (0, 81, 0, 0, 1167, 1474, 766),
|
||||
"105-传说-扫把": (0, 81, 0, 0, 1229, 1351, 766),
|
||||
"105-传说-十字架": (0, 81, 99, 99, 1229, 1167, 766),
|
||||
"105-传说-念珠": (0, 122, 0, 0, 1106, 1412, 766),
|
||||
"105-传说-图腾": (122, 0, 0, 0, 1289, 1106, 766),
|
||||
"105-传说-镰刀": (81, 81, 0, 0, 1167, 1229, 766),
|
||||
"105-传说-战斧": (81, 0, 0, 0, 1474, 1044, 766),
|
||||
"105-传说-匕首": (122, 0, 0, 0, 1167, 1106, 766),
|
||||
"105-传说-双剑": (81, 0, 0, 0, 1343, 982, 766),
|
||||
"105-传说-手杖": (0, 81, 0, 0, 1087, 1412, 766),
|
||||
"105-传说-苦无": (0, 122, 0, 0, 1030, 1351, 766),
|
||||
"105-传说-长枪": (122, 0, 0, 0, 1289, 1106, 766),
|
||||
"105-传说-战戟": (81, 0, 0, 0, 1474, 1044, 766),
|
||||
"105-传说-光枪": (81, 81, 0, 0, 1167, 1412, 766),
|
||||
"105-传说-暗矛": (81, 122, 0, 0, 1167, 1289, 766),
|
||||
"105-传说-长刀": (81, 81, 0, 0, 1327, 1106, 766),
|
||||
"105-传说-小太刀": (81, 41, 0, 0, 1229, 1229, 766),
|
||||
"105-传说-重剑": (81, 0, 0, 0, 1474, 1106, 766),
|
||||
"105-传说-源力剑": (0, 81, 0, 0, 1167, 1412, 766),
|
||||
"105-传说-玄机弓": (0, 81, 0, 0, 1327, 1106, 766),
|
||||
"110-史诗-强攻弩": (88, 0, 0, 0, 1614, 1210, 864),
|
||||
"105-史诗-强攻弩": (85, 0, 0, 0, 1544, 1158, 818),
|
||||
"105-传说-强攻弩": (81, 0, 0, 0, 1474, 1106, 766),
|
||||
"110-史诗-妖影弓": (88, 88, 0, 0, 1277, 1344, 864),
|
||||
"105-史诗-妖影弓": (85, 85, 0, 0, 1222, 1287, 818),
|
||||
"105-传说-妖影弓": (81, 81, 0, 0, 1167, 1229, 766)
|
||||
}
|
||||
|
||||
其他基础 = {
|
||||
"110-史诗-项链": (100, 151, 100, 227, 0, 11159),
|
||||
"110-史诗-戒指": (176, 176, 100, 100, 0, 4470),
|
||||
"110-史诗-手镯": (151, 100, 227, 100, 0, 6706),
|
||||
"110-史诗-辅助装备": (150, 150, 150, 150, 0, 0),
|
||||
"110-史诗-魔法石": (175, 175, 175, 175, 0, 0),
|
||||
"110-史诗-耳环": (175, 175, 175, 175, 0, 0),
|
||||
"105-史诗-项链": (100, 150, 100, 222, 0, 10736),
|
||||
"105-史诗-戒指": (173, 173, 100, 100, 0, 4294),
|
||||
"105-史诗-手镯": (150, 100, 222, 100, 0, 6600),
|
||||
"105-史诗-辅助装备": (149, 149, 149, 149, 0, 0),
|
||||
"105-史诗-魔法石": (172, 172, 172, 172, 0, 0),
|
||||
"105-史诗-耳环": (172, 172, 172, 172, 0, 0)
|
||||
}
|
||||
|
||||
|
||||
def 设置其他基础(装备):
|
||||
|
||||
b = 其他基础.get('{}-{}-{}'.format(110 if 装备.神 else 装备.等级, 装备.品质, 装备.部位),
|
||||
(0, 0, 0, 0, 0))
|
||||
|
||||
attr = ['力量', '智力', '体力', '精神']
|
||||
for i in range(len(attr)):
|
||||
if (b[i] != 0):
|
||||
setattr(装备, attr[i], round((b[i]) * Decimal(1.0)))
|
||||
pass
|
||||
|
||||
|
||||
def 设置武器基础(装备):
|
||||
# 装备.力量 = {}
|
||||
# 装备.智力 = {}
|
||||
# 装备.体力 = {}
|
||||
# 装备.精神 = {}
|
||||
# 装备.物理攻击力 = {}
|
||||
# 装备.魔法攻击力 = {}
|
||||
# 装备.独立攻击力 = {}
|
||||
|
||||
b = 武器基础.get('{}-{}-{}'.format(110 if 装备.神 else 装备.等级, 装备.品质, 装备.类型),
|
||||
(0, 0, 0, 0, 0, 0, 0, 0))
|
||||
|
||||
attr = ['力量', '智力', '体力', '精神', '物理攻击力', '魔法攻击力', '独立攻击力']
|
||||
for i in range(len(attr)):
|
||||
if (b[i] != 0):
|
||||
setattr(装备, attr[i], round((b[i]) * Decimal(1.0)))
|
||||
|
||||
|
||||
def 设置防具基础(装备):
|
||||
b = 防具基础.get('{}-{}-{}'.format(110 if 装备.神 else 装备.等级,
|
||||
装备.品质, 装备.部位), (0, 0, 0, 0))
|
||||
attr = ['力量', '智力', '体力', '精神']
|
||||
for j in range(len(attr)):
|
||||
setattr(装备, attr[j], round((b[j]) * Decimal(1.0)))
|
||||
|
||||
|
||||
# 词条计算优先级,默认为100,特殊需求手动设置优先级
|
||||
priority = {
|
||||
# 蓝拳CP-无色消耗
|
||||
691: 0,
|
||||
# 锁血上限
|
||||
1248: 0, 1438: 0, 868: 0.5, 935: 0,
|
||||
1620: 0,
|
||||
# 无色结算顺序
|
||||
20067: 2,
|
||||
20069: 2,
|
||||
1147: 1,
|
||||
878: 998,
|
||||
1102: 999,
|
||||
1119: 1000,
|
||||
1120: 1000,
|
||||
1573: 1000,
|
||||
1589: 1000,
|
||||
1598: 1000,
|
||||
1609: 1000,
|
||||
1611: 1000,
|
||||
1614: 1000,
|
||||
1670: 1000,
|
||||
1692: 1000,
|
||||
# MP结算顺序
|
||||
1183: 998,
|
||||
1736: 998,
|
||||
988: 999,
|
||||
316: 998,
|
||||
1588: 998,
|
||||
1662: 998,
|
||||
20029: 998,
|
||||
20030: 998,
|
||||
20022: 998,
|
||||
# 属强结算
|
||||
1275: 1999, 1034: 1999, 1035: 1999, 1036: 1999, 1037: 1999, 975: 3000, 976: 1999.5, 1252: 3001, 1250: 3002, 1251: 3002, 1430: 3002, 1458: 3002, 235: 3000, 1689: 3000, 20045: 3000,
|
||||
# 异常赋予结算顺序
|
||||
190: 1, 799: 1, 810: 1, 916: 1, 900: 1, 968: 1, 977: 1, 1228: 1, 1192: 1, 1184: 1, 1333: 1, 1334: 1, 1335: 1, 1337: 1, 1338: 1, 1315: 1, 1300: 1, 1310: 1, 598: 1, 873: 1, 995: 1, 996: 1, 952: 1, 940: 1, 942: 1, 943: 1, 793: 1, 794: 1, 795: 1, 796: 1, 797: 1, 1123: 1, 1071: 1, 1072: 1, 1073: 1, 1074: 1, 59: 1, 60: 1, 61: 1, 62: 1, 63: 1, 64: 1, 65: 1, 66: 1, 67: 1, 68: 1, 69: 1, 70: 1, 71: 1, 177: 1, 178: 1, 179: 1, 180: 1, 1213: 2, 1207: 2, 1011: 1, 919: 2, 920: 1, 1219: 1, 924: 1, 1053: 1, 892: 1, 1197: 1, 842: 1, 839: 1, 1210: 3, 1276: 101, 1294: 1, 1340: 3, 1341: 1, 1342: 2, 1356: 1, 1357: 1, 1358: 1, 1343: 3, 966: 3, 1363: 1, 1364: 1, 1365: 1, 1366: 1, 1221: 2, 992: 3,
|
||||
1273: 1002, 1269: 4002, 1431: 4002, 1432: 4002, 1459: 4002, 1460: 4002, 1246: 4003, 198: 3000, 199: 3000, 203: 1, 204: 3000, 205: 3000, 1605: 4003, 1706: 3000, 1618: 4003, 1751: 3000, 1306: 3000, 20003: 4003,
|
||||
# 睡眠结算顺序
|
||||
934: 1, 1272: 1, 1271: 2004, 835: 2000, 305: 2000, 1746: 2000, 1591: 2000, 1592: 2000,
|
||||
# CD耳环
|
||||
991: 1000,
|
||||
# 属性抗性
|
||||
1297: 1999, 1316: 2000, 1317: 2000, 1239: 2000, 1253: 2000, 1148: 2000, 1387: 2000, 1256: 2000, 1257: 2000, 1012: 2000, 1013: 1999, 1014: 1999, 1015: 1999, 1016: 1999, 1002: 2000, 1028: 2000, 1029: 2000, 1030: 2000, 1031: 2000, 182: 3500, 342: 2000, 344: 3500, 350: 3500, 356: 3500, 301: 2000, 302: 2000, 303: 2000, 304: 2000, 352: 2000, 353: 2000, 354: 2000, 355: 2000, 1699: 2000, 1688: 2000,
|
||||
851: 2000, 846: 2000, 844: 2000, 849: 2000, 1022: 2000, 1385: 2000, 1386: 2000,
|
||||
# 睡眠
|
||||
1132: 2000, 265: 2000, 351: 2000, 20011: 20000,
|
||||
1566: 0, 1558: 3002, 1491: 1, 1492: 1, 1493: 1, 1494: 1, 1559: 4002, 1560: 4002, 1515: 2000, 1513: 2000, 1514: 2000,
|
||||
1637: 2001,
|
||||
# TP
|
||||
1451: 2000,
|
||||
1574: 2001, 1680: 2001
|
||||
}
|
||||
|
||||
|
||||
class equipment_list():
|
||||
def __init__(self, version: str) -> None:
|
||||
self.version = version
|
||||
self.info = get_eq_info_data(version)
|
||||
self.entry_info = get_entry_info_data(version)
|
||||
self.suit_info = get_suit_info_data(version)
|
||||
self.parts = set()
|
||||
self.load_equ()
|
||||
self.info_sj = deepcopy(self.info)
|
||||
self.load_equ_sj()
|
||||
|
||||
def load_equ(self) -> None:
|
||||
self.equ_list = {}
|
||||
self.equ_id = {}
|
||||
self.equ_tuple = ()
|
||||
self.equ_id_tuple = ()
|
||||
for k in self.info.keys():
|
||||
temp = equipment(self.info[k])
|
||||
i = int(k)
|
||||
self.equ_list[i] = temp
|
||||
self.equ_id[temp.名称] = i
|
||||
self.equ_tuple += (temp, )
|
||||
self.equ_id_tuple += (i, )
|
||||
self.parts.add(temp.部位)
|
||||
|
||||
def load_equ_sj(self) -> None:
|
||||
self.equ_list_sj = {}
|
||||
self.equ_id_sj = {}
|
||||
self.equ_tuple_sj = ()
|
||||
self.equ_id_tuple_sj = ()
|
||||
for k in self.info_sj.keys():
|
||||
# 特殊处理,游戏中取的110装备基础,增幅等按照105装备等级计算
|
||||
# if self.info_sj[k]["等级"] == 105 and self.info_sj[k]["品质"] == "史诗":
|
||||
# self.info_sj[k]["等级"] = 110
|
||||
if self.info_sj[k]["品质"] == "史诗":
|
||||
self.info_sj[k]["神"] = True
|
||||
info = self.info_sj[k]
|
||||
temp = equipment(info)
|
||||
attr = ['力量', '智力', '体力', '精神', '物理攻击力', '魔法攻击力', '独立攻击力']
|
||||
for i in attr:
|
||||
self.info_sj[k][i] = getattr(temp, i)
|
||||
i = int(k)
|
||||
self.equ_list_sj[i] = temp
|
||||
self.equ_id_sj[temp.名称] = i
|
||||
self.equ_tuple_sj += (temp, )
|
||||
self.equ_id_tuple_sj += (i, )
|
||||
self.parts.add(temp.部位)
|
||||
|
||||
def get_json(self, i):
|
||||
temp = self.info[str(i)]
|
||||
return {
|
||||
"id": int(i),
|
||||
"name": temp["名称"],
|
||||
"icon": temp["icon"],
|
||||
"part": temp["部位"],
|
||||
'type': temp['类型'],
|
||||
"stable": temp["固有属性"],
|
||||
"alternative": temp["可选属性"] if "可选属性" in temp else [],
|
||||
"order": temp["order"] if "order" in temp else 0,
|
||||
"features": temp["特性"] if "特性" in temp else [],
|
||||
"rarity": temp["品质"]
|
||||
}
|
||||
|
||||
def get_equ_by_id(self, id, sj=False) -> equipment:
|
||||
if sj:
|
||||
return self.equ_list_sj.get(int(id), equipment())
|
||||
else:
|
||||
return self.equ_list.get(int(id), equipment())
|
||||
|
||||
def get_equ_by_name(self, name, sj=False) -> equipment:
|
||||
return self.get_equ_by_id(self.equ_id.get(name, 0), sj)
|
||||
|
||||
def get_id_by_name(self, name) -> int:
|
||||
return self.equ_id.get(name, 0)
|
||||
|
||||
def get_equ_list(self) -> List[equipment]:
|
||||
return self.equ_tuple
|
||||
|
||||
def get_equ_id_list(self) -> List[int]:
|
||||
return self.equ_id_tuple
|
||||
|
||||
def get_entry_atk_by_id(self, id) -> int:
|
||||
return self.entry_info.get(str(id), {}).get('attack', 0)
|
||||
|
||||
def get_entry_buff_by_id(self, id) -> int:
|
||||
return self.entry_info.get(str(id), {}).get('buff', 0)
|
||||
|
||||
def get_entry_params_by_id(self, id) -> int:
|
||||
return self.entry_info.get(str(id), {}).get('params', [])
|
||||
|
||||
def get_entry_template_by_id(self, id) -> int:
|
||||
return self.entry_info.get(str(id), {}).get('template', None)
|
||||
|
||||
def get_damagelist_by_idlist(self, idlist, customize: Dict[str, List[int]] = {}, fusion_list=[], merge: Dict[str, List[int]] = {}) -> List[tuple]:
|
||||
damagelist = [] # (部位, 序号, 基础伤害,类型,index)
|
||||
# 1 有成长 -1 无成长
|
||||
# 序号说明
|
||||
# 0~9 成长属性
|
||||
# 10~19 固定属性
|
||||
# 20~29 贴膜属性
|
||||
# 30~39 词条融合
|
||||
for id in idlist:
|
||||
i = self.get_equ_by_id(id)
|
||||
temp = []
|
||||
if len(i.可选属性) > 0:
|
||||
temp = customize.get(str(id), [])
|
||||
num = 0
|
||||
for k in i.成长属性 + temp:
|
||||
damagelist.append((
|
||||
i.部位,
|
||||
num,
|
||||
self.get_entry_atk_by_id(k),
|
||||
self.get_entry_buff_by_id(k),
|
||||
self.get_entry_params_by_id(k),
|
||||
1,
|
||||
k
|
||||
)),
|
||||
num += 1
|
||||
pass
|
||||
if i.部位 == "武器":
|
||||
num = 30
|
||||
for j in merge:
|
||||
damagelist.append((
|
||||
'武器',
|
||||
num,
|
||||
self.get_entry_atk_by_id(j),
|
||||
self.get_entry_buff_by_id(j),
|
||||
self.get_entry_params_by_id(j),
|
||||
-1,
|
||||
j
|
||||
))
|
||||
num += 1
|
||||
for id in fusion_list:
|
||||
i = self.get_equ_by_id(id)
|
||||
temp = []
|
||||
if len(i.可选属性) > 0:
|
||||
temp = list(filter(lambda x:x>0,customize.get(str(id), [])))
|
||||
num = 20
|
||||
for k in i.固有属性 + temp:
|
||||
damagelist.append((
|
||||
i.部位,
|
||||
num,
|
||||
self.get_entry_atk_by_id(k),
|
||||
self.get_entry_buff_by_id(k),
|
||||
self.get_entry_params_by_id(k),
|
||||
-1,
|
||||
k
|
||||
))
|
||||
num += 1
|
||||
return damagelist
|
||||
|
||||
def get_fusion_by_idlist(self, idlist) -> List[tuple]:
|
||||
damagelist = [] # (部位, 序号, 基础伤害)
|
||||
for id in idlist:
|
||||
i = self.get_equ_by_id(id)
|
||||
num = 0
|
||||
for k in i.固有属性:
|
||||
damagelist.append((
|
||||
i.部位,
|
||||
num,
|
||||
self.get_entry_atk_by_id(k),
|
||||
self.get_entry_buff_by_id(k)))
|
||||
num += 1
|
||||
pass
|
||||
return damagelist
|
||||
|
||||
def set_func_chose(self, choseinfo) -> None:
|
||||
try:
|
||||
entry = importlib.import_module(
|
||||
"core.equipment.entry_{}".format(self.version))
|
||||
except Exception:
|
||||
entry = importlib.import_module("core.equipment.entry_0")
|
||||
variable_set = entry.variable_set
|
||||
for i in choseinfo.keys():
|
||||
id = int(i)
|
||||
if id >= 20000 and id in variable_set.keys(): # 额外选项,参数设置
|
||||
try:
|
||||
variable_set[id](choseinfo[i])
|
||||
except Exception:
|
||||
pass
|
||||
# else:
|
||||
# id 错误
|
||||
|
||||
def get_func_by_id(self, id) -> Function:
|
||||
try:
|
||||
entry = importlib.import_module(
|
||||
"core.equipment.entry_{}".format(self.version))
|
||||
except Exception:
|
||||
entry = importlib.import_module("core.equipment.entry_0")
|
||||
entry_func_list = entry.entry_func_list
|
||||
func_list = entry_func_list.get(int(id), entry_func_list[0])
|
||||
return func_list
|
||||
|
||||
def get_func_list_by_idlist(self, char) -> List[Function]:
|
||||
temp = []
|
||||
for id in char.装备栏:
|
||||
i = self.get_equ_by_id(id)
|
||||
cus = []
|
||||
if len(i.可选属性) > 0:
|
||||
cus = char.自定义词条.get(str(id), [])
|
||||
index = 0
|
||||
for k in i.成长属性 + cus:
|
||||
temp.append((k, i.部位, index, 1,id,0)) # 词条id 部位 部位序号(用于获取成长词条等级)
|
||||
index += 1
|
||||
index = 30
|
||||
mer = char.武器融合.get(str(id), [])
|
||||
for k in mer:
|
||||
temp.append((k, i.部位, index, -1,id,0))
|
||||
index += 1
|
||||
index = 10
|
||||
for k in i.固有属性:
|
||||
temp.append((k, i.部位, index, -1,id,0)) # 词条id 部位 部位序号(非成长词条无序号)
|
||||
index += 1
|
||||
for id in char.融合列表:
|
||||
i = self.get_equ_by_id(id)
|
||||
index = 20
|
||||
cus = []
|
||||
if len(i.可选属性) > 0:
|
||||
cus = list(filter(lambda x:x>0,char.自定义词条.get(str(id), [])))
|
||||
for index2,k in enumerate(i.固有属性 + cus):
|
||||
temp.append((k, i.部位, index, -3,id,index2)) # 词条id 部位 部位序号(非成长词条无序号)
|
||||
index += 1
|
||||
for id in char.特性列表:
|
||||
# 类型 -2 特性
|
||||
if id is not None and int(id) >= 20000:
|
||||
temp.append((int(id), '', -1, -2,id,0))
|
||||
for id in char.suits:
|
||||
if id is not None and int(id) > 30000:
|
||||
temp.append((id, '', -1, -1,id,0))
|
||||
pass
|
||||
# 词条优先级排序
|
||||
temp.sort(key=(lambda x: priority.get(x[0], 100)))
|
||||
funclist = []
|
||||
for k, part, index, type,id,positon in temp:
|
||||
funclist.append((
|
||||
self.get_func_by_id(int(k)),
|
||||
part,
|
||||
index,
|
||||
k,
|
||||
type,
|
||||
id,
|
||||
positon
|
||||
))
|
||||
return funclist
|
||||
|
||||
def get_chose_set_info(self) -> List[tuple]:
|
||||
try:
|
||||
entry = importlib.import_module(
|
||||
"core.equipment.entry_{}".format(self.version))
|
||||
except Exception:
|
||||
entry = importlib.import_module("core.equipment.entry_0")
|
||||
entry_chose = entry.entry_chose
|
||||
info = []
|
||||
entry_chose.sort()
|
||||
# for i in entry_func_list.keys():
|
||||
# temp = entry_func_list[i]
|
||||
# if len(temp) > 1:
|
||||
# ctext = []
|
||||
# for k in temp:
|
||||
# ctext.append(k(text=True))
|
||||
# info.append((i, ctext))
|
||||
return info + entry_chose
|
||||
|
||||
def get_chose_set(self, mode=0, alter="") -> List[Dict]:
|
||||
try:
|
||||
entry = importlib.import_module(
|
||||
"core.equipment.entry_{}".format(self.version))
|
||||
except Exception:
|
||||
entry = importlib.import_module("core.equipment.entry_0")
|
||||
multi_select = entry.multi_select
|
||||
if mode == 1:
|
||||
setinfo = {}
|
||||
defaule_set = {
|
||||
"20000": [75],
|
||||
"20042": [0],
|
||||
"20074": [0],
|
||||
"20113": [16],
|
||||
"20165": [1],
|
||||
"20183": [1],
|
||||
"20189": [0],
|
||||
"20194": [0],
|
||||
"20216": [0],
|
||||
"20253": [0],
|
||||
"20351": [0, 2, 3, 6, 8],
|
||||
"20813": [0],
|
||||
"20814": [0],
|
||||
"20840": [22],
|
||||
"21050": [0],
|
||||
"21127": [0],
|
||||
"21261": [0],
|
||||
"31283": [0, 2],
|
||||
"31286": [3],
|
||||
"31287": [3],
|
||||
"31288": [3],
|
||||
"31289": [4],
|
||||
"31292": [30],
|
||||
"31334": [5],
|
||||
"20037": [5],
|
||||
"31465": [0],
|
||||
"20990": [6],
|
||||
"20948": [0],
|
||||
"31666": [10],
|
||||
"30223": [0]
|
||||
}
|
||||
for i in self.get_chose_set_info():
|
||||
if i[2] == "" or i[2] in alter:
|
||||
setinfo[i[0]] = defaule_set.get(str(i[0]), [0])
|
||||
else:
|
||||
setinfo = []
|
||||
for i in self.get_chose_set_info():
|
||||
if i[2] == "" or i[2] in alter:
|
||||
setinfo.append({
|
||||
"id": i[0],
|
||||
"selectList": i[1],
|
||||
"multi-select": multi_select.get(i[0], True)
|
||||
})
|
||||
return setinfo
|
||||
|
||||
def get_asrahan(self):
|
||||
try:
|
||||
entry = importlib.import_module(
|
||||
"core.equipment.entry_{}".format(self.version))
|
||||
except Exception:
|
||||
entry = importlib.import_module("core.equipment.entry_0")
|
||||
return entry.asrahan_effect
|
||||
|
||||
def get_funs_info(self, type, char):
|
||||
try:
|
||||
entry = importlib.import_module(
|
||||
"core.equipment.entry_{}".format(self.version))
|
||||
except Exception:
|
||||
entry = importlib.import_module("core.equipment.entry_0")
|
||||
return entry.get_info(type, char)
|
||||
|
||||
|
||||
def get_global_data(name="", version="0", defa=None):
|
||||
try:
|
||||
entry = importlib.import_module(
|
||||
"core.equipment.entry_{}.params".format(version))
|
||||
except Exception:
|
||||
entry = importlib.import_module("core.equipment.entry_0.params")
|
||||
if hasattr(entry, name):
|
||||
attr = getattr(entry, name)
|
||||
return attr() if attr.__class__.__name__ == "function" else attr
|
||||
else:
|
||||
return defa
|
||||
|
||||
# def set_equ_customize(self, customize):
|
||||
# for key in customize.keys():
|
||||
# self.get_equ_by_id(key).成长属性 = customize[key]
|
||||
# print(self.get_equ_by_id(key).成长属性,customize[key])
|
||||
|
||||
|
||||
global equ0
|
||||
equ0 = equipment_list("0")
|
||||
# equ1 = equipment_list("1")
|
||||
|
||||
# global equ1
|
||||
# equ1 = equipment_list("1")
|
||||
|
||||
|
||||
def get_equ(version="0"):
|
||||
if version is None or version == "":
|
||||
version = "0"
|
||||
try:
|
||||
temp = eval("equ{}".format(version))
|
||||
except Exception:
|
||||
temp = equ0
|
||||
return temp
|
||||
|
||||
|
||||
def reload_equ():
|
||||
global equ0
|
||||
equ0 = equipment_list("0")
|
||||
Reference in New Issue
Block a user