Lv110版本源码上传
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
from core.basic.character import Character
|
||||
|
||||
class Character(Character):
|
||||
|
||||
def 技能冷却缩减(self, min: int, max: int, x: float, exc=[],excName=[]) -> None:
|
||||
if min == 1 and max == 100:
|
||||
self.冷却缩减 *= (1-x)
|
||||
for i in self.技能栏:
|
||||
if i.所在等级 >= min and i.所在等级 <= max and i.所在等级 not in exc and i.名称 not in excName:
|
||||
if i.是否主动 == 1:
|
||||
i.CDR *= (1 - x)
|
||||
|
||||
def 技能恢复加成(self, min: int, max: int, x: float, exc=[],excName=[]) -> None:
|
||||
if min == 1 and max == 100:
|
||||
self.冷却恢复 += x
|
||||
for i in self.技能栏:
|
||||
if i.所在等级 >= min and i.所在等级 <= max and i.所在等级 not in exc and i.名称 not in excName:
|
||||
if i.是否主动 == 1:
|
||||
i.恢复 += x
|
||||
|
||||
|
||||
def 单技能加成(self, 名称: str, 倍率=1.0, CD=1.0, lv=0) -> None:
|
||||
i = self.get_skill_by_name(名称)
|
||||
i.等级加成(lv, char=self)
|
||||
if i.是否主动 == 1:
|
||||
i.CDR *= CD
|
||||
|
||||
def set_individuation(self, info):
|
||||
info['char_optiopns'] = []
|
||||
info['char_optiopns'].append({
|
||||
"name": '三觉绑定:',
|
||||
"option": ["一次觉醒","二次觉醒"]
|
||||
})
|
||||
|
||||
def 职业特殊设置(self):
|
||||
self.get_skill_by_name("三次觉醒").关联技能= [self.get_skill_by_name('一次觉醒').名称 if self.get_individuation(0) == 0 else self.get_skill_by_name('二次觉醒').名称]
|
||||
pass
|
||||
@@ -0,0 +1,143 @@
|
||||
|
||||
from core.basic.property import CharacterProperty
|
||||
from core.basic.skill import 技能
|
||||
|
||||
|
||||
class Buffer(CharacterProperty):
|
||||
|
||||
def BUFF量():
|
||||
return 0
|
||||
|
||||
def 辅助属性加成(self, buff固定力智=0, buff百分比力智=0.0, buff固定三攻=0, buff百分比三攻=0.0, 觉醒固定力智=0, 觉醒百分比力智=0.0, buff量=0, 百分比buff量=0.0):
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
class 辅助职业技能(技能):
|
||||
名称 = ''
|
||||
备注 = ''
|
||||
所在等级 = 0
|
||||
等级上限 = 0
|
||||
学习间隔 = 3
|
||||
等级 = 0
|
||||
基础等级 = 0
|
||||
是否主动 = 0
|
||||
站街生效 = 0
|
||||
等级溢出 = 0
|
||||
|
||||
是否启用 = 1
|
||||
技能序号 = 0
|
||||
|
||||
是否有伤害 = 0
|
||||
|
||||
def 等级加成(self, x, char={}):
|
||||
if self.等级 != 0:
|
||||
if self.等级 + x > self.等级上限:
|
||||
self.等级 = self.等级上限
|
||||
if self.基础等级 != self.等级上限:
|
||||
self.等级溢出 = 1
|
||||
else:
|
||||
self.等级 += int(x)
|
||||
|
||||
def 结算统计(self, context=None):
|
||||
return [0, 0, 0, 0]
|
||||
# 力智 三攻 智力 体精
|
||||
|
||||
|
||||
class 辅助职业被动技能(辅助职业技能):
|
||||
是否主动 = 0
|
||||
进图加成 = 0
|
||||
|
||||
|
||||
class 辅助职业主动技能(辅助职业技能):
|
||||
是否主动 = 1
|
||||
适用数值 = 0
|
||||
CD = 0.0
|
||||
CDR_O = 1.0
|
||||
CDR = 1.0
|
||||
恢复 = 1.0
|
||||
手搓 = False
|
||||
|
||||
def 武器CD系数(self, 武器类型, 输出类型):
|
||||
return 1.0
|
||||
|
||||
def 手搓CD(self):
|
||||
cdr = 0
|
||||
if self.手搓:
|
||||
if self.所在等级 >= 15 and self.所在等级 <= 30:
|
||||
cdr = 0.01 * self.手搓收益
|
||||
if self.所在等级 >= 35 and self.所在等级 <= 70:
|
||||
cdr = 0.02 * self.手搓收益
|
||||
if self.所在等级 >= 75 and self.所在等级 <= 100:
|
||||
cdr = 0.05 * self.手搓收益
|
||||
if self.所在等级 in [50, 85, 100]:
|
||||
cdr = 0.05 * self.手搓收益
|
||||
return cdr
|
||||
|
||||
def 等效CD(self, **argv):
|
||||
# 武器类型 输出类型 额外CDR 手搓收益 恢复
|
||||
武器类型 = argv.get('武器类型', '')
|
||||
输出类型 = argv.get('输出类型', '')
|
||||
额外CDR = argv.get('额外CDR', 1.0)
|
||||
# 手搓收益 = argv.get('手搓收益', 1.0)
|
||||
面板显示 = argv.get('面板显示', False)
|
||||
额外恢复 = argv.get('额外恢复', 0)
|
||||
|
||||
cdr = self.手搓CD()
|
||||
|
||||
return round(max(self.CD * self.CDR * 额外CDR / ((self.恢复 + 额外恢复) if not 面板显示 else 1) * (self.武器CD系数(武器类型, 输出类型) - (cdr if not 面板显示 else 0)), self.CD * 0.3)*self.CDR_O, 1)
|
||||
|
||||
class 辅助职业觉醒技能(辅助职业主动技能):
|
||||
所在等级 = 50
|
||||
等级精通 = 30
|
||||
等级上限 = 50
|
||||
等级精通 = 40
|
||||
基础等级 = 14
|
||||
一觉力智 = 0
|
||||
一觉力智per = 1.0
|
||||
一觉力智perTotal = 1.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, 1736, 1804, 1872, 1940, 2008, 2076, 2144, 2212, 2280, 2348]
|
||||
|
||||
def 结算统计(self, context: Buffer, compute_3rd_awake=False):
|
||||
buffer_power = context.BUFF量()
|
||||
|
||||
三次觉醒 = context.get_skill_by_name("三次觉醒")
|
||||
if not context.check_fun_by_id(20064) and not compute_3rd_awake and self.名称 in 三次觉醒.关联技能:
|
||||
return [0] * 5
|
||||
旧词条力智 = ((self.适用数值/750 + 1) *
|
||||
(self.力智[self.等级] + self.一觉力智))*self.一觉力智per
|
||||
|
||||
新词条力智 = (((self.适用数值 + 5250) / 750 + 1) *
|
||||
(buffer_power + 5000) * 0.000025 * self.力智[self.等级]) if buffer_power > 0 else 0
|
||||
力智 = (旧词条力智 + 新词条力智)*self.一觉力智perTotal
|
||||
return [力智, 0, 0, 0, 0]
|
||||
# 力智、三攻、智力、体力、精神
|
||||
|
||||
|
||||
class 辅助职业三觉技能(辅助职业主动技能):
|
||||
所在等级 = 100
|
||||
等级精通 = 30
|
||||
等级上限 = 40
|
||||
学习间隔 = 5
|
||||
绑定一觉力智per = 1.08
|
||||
绑定二觉力智per = 0.23
|
||||
关联技能 = []
|
||||
|
||||
def 结算统计(self, context: Buffer):
|
||||
awake = context.get_skill_by_name('一次觉醒')
|
||||
if awake.是否启用:
|
||||
values = awake.结算统计(context, True)
|
||||
倍率 = self.加成倍率(awake.名称 in self.关联技能)
|
||||
return [int(round(i * 倍率)) for i in values]
|
||||
return [0] * 5
|
||||
|
||||
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影响技能 = ['勇气祝福', '勇气圣歌', '荣誉祝福', '禁忌诅咒', '死命召唤']
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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")
|
||||
@@ -0,0 +1,85 @@
|
||||
|
||||
monster_data = {
|
||||
"0": {
|
||||
"id": 0,
|
||||
"name": "120沙袋(绿)",
|
||||
"防御": 443243,
|
||||
"火抗": 0,
|
||||
"冰抗": 0,
|
||||
"光抗": 0,
|
||||
"暗抗": 0
|
||||
},
|
||||
"1": {
|
||||
"id": 1,
|
||||
"name": "130沙袋",
|
||||
"防御": 506109,
|
||||
"火抗": 0,
|
||||
"冰抗": 0,
|
||||
"光抗": 0,
|
||||
"暗抗": 0
|
||||
},
|
||||
"2": {
|
||||
"id": 2,
|
||||
"name": "140巴卡尔",
|
||||
"防御": 3025925,
|
||||
"火抗": 20,
|
||||
"冰抗": 20,
|
||||
"光抗": 20,
|
||||
"暗抗": 20
|
||||
},
|
||||
"3": {
|
||||
"id": 3,
|
||||
"name": "雾神“雾”",
|
||||
"防御": 3025925,
|
||||
"火抗": 20,
|
||||
"冰抗": 20,
|
||||
"光抗": 20,
|
||||
"暗抗": 20
|
||||
}
|
||||
}
|
||||
|
||||
scene_data = {
|
||||
"0": {
|
||||
"id": 0,
|
||||
"name": "修炼道场",
|
||||
"防御系数": 1,
|
||||
"系统奶系数": 0,
|
||||
"系统奶基数": 0
|
||||
},
|
||||
"1": {
|
||||
"id": 1,
|
||||
"name": "巴卡尔攻坚战",
|
||||
"防御系数": 40,
|
||||
"系统奶系数": 3.08,
|
||||
"系统奶基数": 3916
|
||||
},
|
||||
"2": {
|
||||
"id": 2,
|
||||
"name": "雾神攻坚战",
|
||||
"防御系数": 80,
|
||||
"系统奶系数": 3.08,
|
||||
"系统奶基数": 3916
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def get_monster_data(id):
|
||||
return monster_data.get(str(id), {
|
||||
"id": 2,
|
||||
"name": "140巴卡尔",
|
||||
"防御": 3025925,
|
||||
"火抗": 20,
|
||||
"冰抗": 20,
|
||||
"光抗": 20,
|
||||
"暗抗": 20
|
||||
})
|
||||
|
||||
|
||||
def get_scene_data(id):
|
||||
return scene_data.get(str(id), {
|
||||
"id": 1,
|
||||
"name": "巴卡尔攻坚战",
|
||||
"防御系数": 40,
|
||||
"系统奶系数": 3.08,
|
||||
"系统奶基数": 3916
|
||||
})
|
||||
@@ -0,0 +1,316 @@
|
||||
from typing import Union
|
||||
from xmlrpc.client import Boolean
|
||||
|
||||
from core.basic.skill import 主动技能, 技能, 被动技能
|
||||
|
||||
|
||||
class CharacterProperty:
|
||||
|
||||
评分: float = 0
|
||||
|
||||
类型: str
|
||||
|
||||
适用属性: str = "智力"
|
||||
|
||||
def 基础属性加成(self,
|
||||
物理攻击力=0.00, 魔法攻击力=0.00, 独立攻击力=0.00, 三攻=0.00,
|
||||
力量=0.00, 智力=0.00, 力智=0.00, 体力=0.00, 精神=0.00, 体精=0.00, 四维=0.00,
|
||||
物理暴击率=0.00, 魔法暴击率=0.00, 暴击率=0.00,
|
||||
攻击速度=0.00, 施放速度=0.00, 移动速度=0.00, 三速=0.00, 火属性抗性=0, 光属性抗性=0, 冰属性抗性=0, 暗属性抗性=0, 所有属性抗性=0, 所有异常抗性=0, 所有职业异常抗性=0, 进图力量=0.00, 进图智力=0.00, **kwargs):
|
||||
物理攻击力 += 三攻
|
||||
魔法攻击力 += 三攻
|
||||
独立攻击力 += 三攻
|
||||
|
||||
力量 += 力智 + 四维 + 进图力量
|
||||
智力 += 力智 + 四维 + 进图智力
|
||||
体力 += 体精 + 四维
|
||||
精神 += 体精 + 四维
|
||||
|
||||
物理暴击率 += 暴击率
|
||||
魔法暴击率 += 暴击率
|
||||
|
||||
if (self.类型 == "辅助"):
|
||||
if (self.适用属性 == '体力'):
|
||||
if (体力 > 0):
|
||||
self.评分 += 体力 * 15
|
||||
elif (self.适用属性 == '精神'):
|
||||
if (精神 > 0):
|
||||
self.评分 += 精神 * 15
|
||||
elif (self.适用属性 == '智力'):
|
||||
if (智力 > 0):
|
||||
self.评分 += 智力 * 15
|
||||
elif (self.类型 == "物理百分比"):
|
||||
if 力量 > 0:
|
||||
self.评分 += 力量 * 5
|
||||
if 物理攻击力 > 0:
|
||||
self.评分 += 物理攻击力 * 10
|
||||
if 物理暴击率 > 0:
|
||||
self.评分 += 物理暴击率
|
||||
elif (self.类型 == "魔法百分比"):
|
||||
if 智力 > 0:
|
||||
self.评分 += 智力 * 5
|
||||
if 魔法攻击力 > 0:
|
||||
self.评分 += 魔法攻击力 * 10
|
||||
if 魔法暴击率 > 0:
|
||||
self.评分 += 魔法暴击率
|
||||
elif (self.类型 == "物理固伤"):
|
||||
if 力量 > 0:
|
||||
self.评分 += 力量 * 5
|
||||
if 独立攻击力 > 0:
|
||||
self.评分 += 独立攻击力 * 10
|
||||
if 物理暴击率 > 0:
|
||||
self.评分 += 物理暴击率
|
||||
elif self.类型 == "魔法固伤":
|
||||
if 智力 > 0:
|
||||
self.评分 += 智力 * 5
|
||||
if 独立攻击力 > 0:
|
||||
self.评分 += 独立攻击力 * 10
|
||||
if 魔法暴击率 > 0:
|
||||
self.评分 += 魔法暴击率
|
||||
pass
|
||||
|
||||
def 攻击强化加成(self, x=0):
|
||||
if self.类型 != "辅助":
|
||||
self.评分 += x * 1000
|
||||
pass
|
||||
|
||||
def 百分比攻击强化加成(self, x=0.0):
|
||||
if self.类型 != "辅助":
|
||||
self.评分 = (self.评分 + 2000) * (1 + x * 1000)
|
||||
|
||||
def 技能攻击力加成(self, x=0, 辟邪玉加成=1, 适用累加=1, part='', show=True):
|
||||
if self.类型 != "辅助":
|
||||
self.评分 = (self.评分 + 2000) * (1 + x * 2000)
|
||||
|
||||
def 辅助属性加成(self, buff固定力智=0, buff百分比力智=0.0, buff固定三攻=0, buff百分比三攻=0.0, 觉醒固定力智=0, 觉醒百分比力智=0.0, buff量=0, 百分比buff量=0.0):
|
||||
if self.类型 == '辅助':
|
||||
self.评分 += buff固定力智
|
||||
self.评分 *= 1.0 + buff百分比力智
|
||||
self.评分 += buff固定三攻
|
||||
self.评分 *= 1.0 + buff百分比三攻
|
||||
self.评分 += 觉醒固定力智
|
||||
self.评分 *= 1.0 + 觉醒百分比力智
|
||||
self.评分 += buff量 / 100
|
||||
self.评分 *= 1.0 + 百分比buff量
|
||||
|
||||
def 技能等级加成(self, 加成类型: str, min: int, max: int, lv: int, exc=[],excName=[]) -> None:
|
||||
if self.类型 == "辅助":
|
||||
if 加成类型 == '主动':
|
||||
if min < 30 and max >= 30:
|
||||
self.评分 += 2000 * (lv + 1)
|
||||
if min <= 50 and max >= 50:
|
||||
self.评分 += 1000 * (lv + 1)
|
||||
|
||||
if 加成类型 == '所有':
|
||||
self.评分 += 1000 * (lv + 1)
|
||||
|
||||
self.评分 += 100 * (lv + 1)
|
||||
pass
|
||||
|
||||
def 评分开始(self):
|
||||
self.评分 = 0
|
||||
|
||||
def 评分结束(self):
|
||||
评分 = self.评分
|
||||
self.评分 = 0
|
||||
return 评分
|
||||
# def get_skill_by_name(self, name) -> 技能 | 主动技能 | 被动技能:
|
||||
|
||||
def get_skill_by_name(self, name) -> Union[技能, 主动技能, 被动技能]:
|
||||
pass
|
||||
|
||||
def 已穿戴神话(self):
|
||||
pass
|
||||
|
||||
def 穿戴低于105(self):
|
||||
pass
|
||||
|
||||
def 获取强化等级(self, part=[]):
|
||||
pass
|
||||
|
||||
def 获取改造等级(self, part=[]):
|
||||
pass
|
||||
|
||||
def check_fun_by_id(self, id: int) -> Boolean:
|
||||
pass
|
||||
|
||||
def check_equ_by_name(self, name: str) -> Boolean:
|
||||
pass
|
||||
|
||||
# region 词条属性
|
||||
|
||||
def set_eq_params(self,key,value):
|
||||
pass
|
||||
|
||||
def get_eq_params(self,key)-> float:
|
||||
pass
|
||||
|
||||
def 基础精通加成(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 百分比防御减少(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 固定防御减少(self, x: int) -> None:
|
||||
pass
|
||||
|
||||
def 伤害类型转化(self, 类型1: str, 类型2: str, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 异常增伤(self, 类型: str, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 异常抗性加成(self, 类型: str, x: float, mode: int = 1) -> None:
|
||||
pass
|
||||
|
||||
def 异常抗性获取(self, 类型: str, mode: int = 1) -> float:
|
||||
pass
|
||||
|
||||
def 属性攻击(self, 类型: str) -> None:
|
||||
pass
|
||||
|
||||
def 所有异常抗性加成(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 条件技攻加成(self, 类型: str, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 条件冷却加成(self, 类型: str, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 条件冷却恢复加成(self, 类型: str, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 指令效果加成(self, 类型: str, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 指令技攻加成(self, x: float, min=1, max=100, exc=[50, 85, 100],excName=[]) -> None:
|
||||
pass
|
||||
|
||||
def MP消耗量加成(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def buff量加成(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 附加伤害加成(self, x: float, 辟邪玉加成=1) -> None:
|
||||
pass
|
||||
|
||||
def 持续伤害加成(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 属性附加加成(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 暴击伤害加成(self, x: float, 辟邪玉加成=1) -> None:
|
||||
pass
|
||||
|
||||
def 伤害增加加成(self, x: float, 辟邪玉加成=1) -> None:
|
||||
pass
|
||||
|
||||
def 最终伤害加成(self, x: float, 辟邪玉加成=1) -> None:
|
||||
pass
|
||||
|
||||
def 百分比力智加成(self, x: float, 辟邪玉加成=1) -> None:
|
||||
pass
|
||||
|
||||
def 百分比三攻加成(self, x: float, 辟邪玉加成=1) -> None:
|
||||
pass
|
||||
|
||||
def 火属性强化加成(self, x: float, 辟邪玉加成=1, mode=0) -> None:
|
||||
pass
|
||||
|
||||
def 冰属性强化加成(self, x: float, 辟邪玉加成=1, mode=0) -> None:
|
||||
pass
|
||||
|
||||
def 光属性强化加成(self, x: float, 辟邪玉加成=1, mode=0) -> None:
|
||||
pass
|
||||
|
||||
def 暗属性强化加成(self, x: float, 辟邪玉加成=1, mode=0) -> None:
|
||||
pass
|
||||
|
||||
def 所有属性强化加成(self, 所有属性强化=0, 火属性强化=0, 冰属性强化=0, 光属性强化=0, 暗属性强化=0, 辟邪玉加成=1, mode=0) -> None:
|
||||
if self.类型 != '辅助':
|
||||
光属性强化 += 所有属性强化
|
||||
暗属性强化 += 所有属性强化
|
||||
火属性强化 += 所有属性强化
|
||||
冰属性强化 += 所有属性强化
|
||||
self.评分 += max(光属性强化, 暗属性强化, 火属性强化, 冰属性强化) * 100
|
||||
pass
|
||||
|
||||
def 火属性抗性加成(self, x: int) -> None:
|
||||
pass
|
||||
|
||||
def 冰属性抗性加成(self, x: int) -> None:
|
||||
pass
|
||||
|
||||
def 光属性抗性加成(self, x: int) -> None:
|
||||
pass
|
||||
|
||||
def 暗属性抗性加成(self, x: int) -> None:
|
||||
pass
|
||||
|
||||
def 所有属性抗性加成(self, x: int) -> None:
|
||||
pass
|
||||
|
||||
def 攻击速度增加(self, x: float, part: str = '') -> None:
|
||||
pass
|
||||
|
||||
def 攻击速度(self) -> float:
|
||||
pass
|
||||
|
||||
def 移动速度增加(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 施放速度增加(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 所有速度增加(self, x: float, part: str = '') -> None:
|
||||
pass
|
||||
|
||||
def 命中率增加(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 回避率增加(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 物理暴击率增加(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 魔法暴击率增加(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 暴击率增加(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def buff技能等级加成(self, LV: int, lv: int) -> None:
|
||||
pass
|
||||
|
||||
def 特殊主动等级加成(self, Lv: int, lv: int) -> None:
|
||||
pass
|
||||
|
||||
def 技能获取(self, min: int, max: int, exc=[]) -> None:
|
||||
pass
|
||||
|
||||
def 技能冷却缩减(self, min: int, max: int, x: float, exc=[],excName=[]) -> None:
|
||||
pass
|
||||
|
||||
def 加算冷却缩减(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 技能恢复加成(self, min: int, max: int, x: float, exc=[],excName=[]) -> None:
|
||||
pass
|
||||
|
||||
def 技能倍率加成(self, min: int, max: int, x: float, exc=[], type="all",excName=[],changeSkill = False) -> None:
|
||||
pass
|
||||
|
||||
def 单技能加成(self, 名称: str, 倍率=1.0, CD=1.0, lv=0) -> None:
|
||||
pass
|
||||
|
||||
def __所有属性强化(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
def 斗神宠物加成(self, x: float) -> None:
|
||||
pass
|
||||
|
||||
# endregion
|
||||
@@ -0,0 +1,278 @@
|
||||
from core.equipment.property import 武器MP系数, 武器冷却惩罚
|
||||
|
||||
|
||||
角色等级 = 110
|
||||
|
||||
|
||||
class 技能:
|
||||
名称 = ''
|
||||
备注 = ''
|
||||
所在等级 = 0
|
||||
等级上限 = 0
|
||||
等级 = 0
|
||||
基础等级 = 0
|
||||
等级溢出 = 0
|
||||
自定义描述 = 0
|
||||
学习间隔 = 1
|
||||
等级精通 = 60
|
||||
|
||||
倍率 = 1.0
|
||||
|
||||
关联技能 = ['无']
|
||||
关联技能1 = ['无']
|
||||
关联技能2 = ['无']
|
||||
关联技能3 = ['无']
|
||||
非关联技能 = ['无']
|
||||
非关联技能1 = ['无']
|
||||
非关联技能2 = ['无']
|
||||
非关联技能3 = ['无']
|
||||
冷却关联技能 = ['无']
|
||||
冷却关联技能1 = ['无']
|
||||
冷却关联技能2 = ['无']
|
||||
冷却关联技能3 = ['无']
|
||||
冷却类型 = 0
|
||||
冷却类型1 = 0
|
||||
冷却类型2 = 0
|
||||
冷却类型3 = 0
|
||||
非冷却关联技能 = ['无']
|
||||
非冷却关联技能1 = ['无']
|
||||
非冷却关联技能2 = ['无']
|
||||
非冷却关联技能3 = ['无']
|
||||
|
||||
MP = [0, 0]
|
||||
手搓 = False
|
||||
手搓收益 = 1.0
|
||||
手搓指令数 = 0
|
||||
无色消耗 = 0
|
||||
技能栏位置 = -1
|
||||
|
||||
def 等级加成(self, x, char={}):
|
||||
if self.等级 != 0:
|
||||
if self.等级 + x > self.等级上限:
|
||||
self.等级 = self.等级上限
|
||||
# if self.基础等级 != self.等级上限 and self.关联技能 != ['无']:
|
||||
# self.等级溢出 = 1
|
||||
else:
|
||||
self.等级 += int(x)
|
||||
|
||||
def TP等级加成(self, x, char={}):
|
||||
pass
|
||||
|
||||
def 物理攻击力倍率(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def 魔法攻击力倍率(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def 独立攻击力倍率(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def 物理攻击力倍率进图(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def 魔法攻击力倍率进图(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def 独立攻击力倍率进图(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def MP消耗(self, **argv):
|
||||
pass
|
||||
|
||||
def 基础等级计算(self):
|
||||
if self.基础等级 == 0:
|
||||
self.基础等级 = min(int((角色等级 + 5 - self.所在等级) / self.学习间隔 + 1),
|
||||
self.等级精通)
|
||||
|
||||
def 加成倍率(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def 加成描述(self, 武器类型):
|
||||
return [round((self.加成倍率(武器类型) - 1)*100, 1), ",".join(self.关联技能), ",".join(self.非关联技能)]
|
||||
|
||||
def 加成倍率1(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def 加成描述1(self, 武器类型):
|
||||
return [round((self.加成倍率1(武器类型) - 1)*100, 1), ",".join(self.关联技能1), ",".join(self.非关联技能1)]
|
||||
|
||||
def 加成倍率2(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def 加成描述2(self, 武器类型):
|
||||
return [round((self.加成倍率2(武器类型) - 1)*100, 1), ",".join(self.关联技能2), ",".join(self.非关联技能2)]
|
||||
|
||||
def 加成倍率3(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def 加成描述3(self, 武器类型):
|
||||
return [round((self.加成倍率3(武器类型) - 1)*100, 1), ",".join(self.关联技能3), ",".join(self.非关联技能3)]
|
||||
|
||||
def CD缩减倍率(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def CD缩减描述(self, 武器类型):
|
||||
return [round((1-self.CD缩减倍率(武器类型))*100, 1), ",".join(self.冷却关联技能), ",".join(self.非冷却关联技能)]
|
||||
|
||||
|
||||
def CD缩减描述1(self, 武器类型):
|
||||
return [round((1-self.CD缩减倍率1(武器类型))*100, 1), ",".join(self.冷却关联技能1), ",".join(self.非冷却关联技能1)]
|
||||
|
||||
def CD缩减倍率2(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def CD缩减描述2(self, 武器类型):
|
||||
return [round((1-self.CD缩减倍率2(武器类型))*100, 1), ",".join(self.冷却关联技能2), ",".join(self.非冷却关联技能2)]
|
||||
|
||||
def CD缩减倍率3(self, 武器类型):
|
||||
return 1.0
|
||||
|
||||
def CD缩减描述3(self, 武器类型):
|
||||
return [round((1-self.CD缩减倍率3(武器类型))*100, 1), ",".join(self.冷却关联技能3), ",".join(self.非冷却关联技能3)]
|
||||
|
||||
|
||||
class 主动技能(技能):
|
||||
# 如果需要继续扩展,可以在各自职业类内继承后自行扩展,同时需要重写下等效百分比函数
|
||||
# 固伤在填写基础及成长的时候需要注意,技能面板/独立得到的成长及数值需要*100
|
||||
CD = 0.0
|
||||
CDR = 1.0
|
||||
CD固定缩减 = 0
|
||||
CDR_O = 1.0
|
||||
TP成长 = 0.0
|
||||
TP上限 = 0
|
||||
TP等级 = 0
|
||||
是否主动 = 1
|
||||
是否有伤害 = 1
|
||||
恢复 = 1.0
|
||||
倍率 = 1.0
|
||||
技攻 = 1.0
|
||||
被动倍率 = 1.0
|
||||
基础施放次数 = 0
|
||||
演出时间 = 0
|
||||
是否有护石 = 0
|
||||
武器倍率 = {}
|
||||
形态 = []
|
||||
国服特色 = 1.0
|
||||
|
||||
data0 = []
|
||||
hit0 = 1
|
||||
power0 = 1
|
||||
|
||||
感电data0 = []
|
||||
感电hit0 = 0
|
||||
感电power0 = 1
|
||||
|
||||
灼伤data0 = []
|
||||
灼伤hit0 = 0
|
||||
灼伤power0 = 1
|
||||
|
||||
中毒data0 = []
|
||||
中毒hit0 = 0
|
||||
中毒power0 = 1
|
||||
|
||||
出血data0 = []
|
||||
出血hit0 = 0
|
||||
出血power0 = 1
|
||||
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
# self.倍率 = 1.0
|
||||
|
||||
def TP等级加成(self, x, char={}):
|
||||
if self.TP等级 != 0:
|
||||
self.TP等级 = min(self.TP等级+x, self.TP上限+2)
|
||||
|
||||
def 形态变更(self, 形态, char):
|
||||
if 形态 == '' and len(self.形态) > 0:
|
||||
形态 = self.形态[0]
|
||||
pass
|
||||
|
||||
def TP加成(self):
|
||||
return 1 + self.TP成长 * self.TP等级
|
||||
|
||||
def 基础百分比(self, 类型, 等级):
|
||||
if 类型 == '直伤':
|
||||
name = ''
|
||||
else:
|
||||
name = 类型
|
||||
百分比 = 0.0
|
||||
for i in range(0, 8):
|
||||
data = getattr(self, '{}data{}'.format(name, i), [])
|
||||
if 等级 < len(data) and 等级 > 0:
|
||||
hit = getattr(self, '{}hit{}'.format(name, i), 1)
|
||||
power = getattr(self, '{}power{}'.format(name, i), 1)
|
||||
百分比 += data[等级] * hit * power
|
||||
return 百分比 * self.国服特色
|
||||
|
||||
def 武器百分比修正(self, 武器类型):
|
||||
return self.武器倍率.get(武器类型, 1.0)
|
||||
|
||||
def 等效百分比(self, **argv):
|
||||
# 武器类型 额外等级 额外倍率 伤害类型 形态
|
||||
武器类型 = argv.get('武器类型', '')
|
||||
额外等级 = argv.get('额外等级', 0)
|
||||
额外倍率 = argv.get('额外倍率', 1.0)
|
||||
伤害类型 = argv.get('伤害类型', '直伤')
|
||||
形态 = argv.get('形态', '')
|
||||
char = argv.get('char', {})
|
||||
|
||||
self.形态变更(形态, char)
|
||||
等级 = min(self.等级 + 额外等级, self.等级上限)
|
||||
|
||||
if 等级 == 0:
|
||||
return 0
|
||||
|
||||
百分比 = self.基础百分比(伤害类型, 等级)
|
||||
|
||||
return 百分比 * self.TP加成() * self.技攻 * self.倍率 * 额外倍率 * self.武器百分比修正(武器类型)
|
||||
|
||||
def 武器CD系数(self, 武器类型, 输出类型):
|
||||
return 武器冷却惩罚(武器类型, 输出类型)
|
||||
|
||||
def 手搓CD(self):
|
||||
cdr = 0
|
||||
if self.手搓:
|
||||
if self.所在等级 >= 15 and self.所在等级 <= 30:
|
||||
cdr = 0.01 * self.手搓收益
|
||||
if self.所在等级 >= 35 and self.所在等级 <= 70:
|
||||
cdr = 0.02 * self.手搓收益
|
||||
if self.所在等级 >= 75 and self.所在等级 <= 100:
|
||||
cdr = 0.05 * self.手搓收益
|
||||
if self.所在等级 in [50, 85, 100]:
|
||||
cdr = 0.05 * self.手搓收益
|
||||
return cdr
|
||||
|
||||
def 等效CD(self, **argv):
|
||||
# 武器类型 输出类型 额外CDR 手搓收益 恢复
|
||||
武器类型 = argv.get('武器类型', '')
|
||||
输出类型 = argv.get('输出类型', '')
|
||||
额外CDR = argv.get('额外CDR', 1.0)
|
||||
# 手搓收益 = argv.get('手搓收益', 1.0)
|
||||
面板显示 = argv.get('面板显示', False)
|
||||
额外恢复 = argv.get('额外恢复', 0)
|
||||
cdr = self.手搓CD()
|
||||
形态 = argv.get('形态', '')
|
||||
char = argv.get('char', {})
|
||||
self.形态变更(形态, char)
|
||||
|
||||
return max(0,round(max(self.CD * self.CDR * 额外CDR / ((self.恢复 + 额外恢复) if not 面板显示 else 1) * (self.武器CD系数(武器类型, 输出类型) - (cdr if not 面板显示 else 0)), self.CD * 0.3) * self.CDR_O, 1) - self.CD固定缩减 / ((self.恢复 + 额外恢复) if not 面板显示 else 1) )
|
||||
|
||||
def MP消耗(self, **argv):
|
||||
# 武器类型 输出类型 额外CDR 手搓收益 恢复=True
|
||||
武器类型 = argv.get('武器类型', '')
|
||||
输出类型 = argv.get('输出类型', '')
|
||||
额外倍率 = argv.get('额外倍率', 1.0)
|
||||
if self.MP is None:
|
||||
self.MP = [0, 0]
|
||||
if self.等级上限 > 1:
|
||||
mpnum = int(self.MP[0] + (self.等级 - 1) *
|
||||
(self.MP[1] - self.MP[0]) / (self.等级上限 - 1))
|
||||
else:
|
||||
mpnum = self.MP[0]
|
||||
return round(mpnum * 武器MP系数(武器类型, 输出类型) * 额外倍率, 0)
|
||||
|
||||
|
||||
class 被动技能(技能):
|
||||
是否主动 = 0
|
||||
是否有伤害 = 0
|
||||
关联技能 = ['所有']
|
||||
Reference in New Issue
Block a user