3214 lines
121 KiB
Python
3214 lines
121 KiB
Python
import importlib
|
|
from copy import deepcopy
|
|
from pyclbr import Function
|
|
from typing import Dict, List, Union
|
|
from uuid import uuid1
|
|
from utils.exception import ResponseException
|
|
|
|
from core.basic.equipment import equipment, get_equ, get_global_data
|
|
from core.basic.property import CharacterProperty
|
|
from core.basic.skill import 主动技能, 技能, 被动技能
|
|
from core.equipment.avatar import 装扮套装, 装扮套装集合, 装扮集合
|
|
from core.equipment.emblems import get_emblems_setinfo
|
|
from core.equipment.enchanting import get_enchanting_setinfo
|
|
from core.equipment.jade import get_jade_setinfo
|
|
from core.equipment.property import (
|
|
增幅计算,
|
|
左右计算,
|
|
成长词条计算,
|
|
武器强化计算,
|
|
精通计算,
|
|
耳环计算,
|
|
获取基础属性,
|
|
获取属性抗性基础,
|
|
获取异常抗性基础,
|
|
辅助精通计算,
|
|
部位列表,
|
|
锻造四维,
|
|
锻造计算,
|
|
)
|
|
from core.equipment.sundry import get_sundries_setinfo
|
|
|
|
# from core.basic.enchanting import get_encfunc_by_id
|
|
# from core.basic.emblems import get_embfunc_by_id
|
|
# from core.basic.jade import get_jadefunc_by_id
|
|
|
|
MAXEQULV = 105
|
|
|
|
|
|
class Character(CharacterProperty):
|
|
等级 = 110
|
|
# 辟邪玉属性
|
|
附加伤害增加增幅: float = 1.0
|
|
属性附加伤害增加增幅: float = 1.0
|
|
技能伤害增加增幅: float = 1.0
|
|
暴击伤害增加增幅: float = 1.0
|
|
伤害增加增幅: float = 1.0
|
|
最终伤害增加增幅: float = 1.0
|
|
力量智力增加增幅: float = 1.0
|
|
物理魔法攻击力增加增幅: float = 1.0
|
|
所有属性强化增幅: float = 1.0
|
|
version = "default"
|
|
equVersion = ""
|
|
bufferCarry = False
|
|
|
|
等级: int = 110
|
|
防御输入: int = 506109
|
|
防御系数: int = 1
|
|
火抗输入: int = 0
|
|
冰抗输入: int = 0
|
|
光抗输入: int = 0
|
|
暗抗输入: int = 0
|
|
打造详情: Dict[str, Dict[str, int]] = {}
|
|
装备栏: List[int] = [] # [装备id]
|
|
部位装备: Dict[str, int] = {} # {部位: 装备id}
|
|
部位附魔: Dict[str, Function] = {} # {部位: 附魔函数}
|
|
词条等级: Dict[str, List[int]] = {} # {部位: [等级1, 2, 3, 4]}
|
|
药剂: List[int] = []
|
|
|
|
# 需要职业自定义数据
|
|
实际名称 = ""
|
|
名称 = ""
|
|
角色 = ""
|
|
角色类型 = ""
|
|
职业 = ""
|
|
武器选项: List[str] = []
|
|
输出类型选项: List[str] = []
|
|
防具精通属性: List[str] = []
|
|
排行类型 = "物理百分比"
|
|
适用属性 = "智力"
|
|
适用数值 = 0
|
|
类型 = ""
|
|
武器类型 = ""
|
|
防具类型 = ""
|
|
转职 = ""
|
|
# 技能栏: List[技能 | 主动技能 | 被动技能] = []
|
|
# 技能序号: Dict[int, 技能 | 主动技能 | 被动技能] = {}
|
|
技能栏: List[Union[技能, 主动技能, 被动技能]] = []
|
|
技能序号: Dict[str, int] = {}
|
|
自定义词条: Dict[int, List[int]] = {}
|
|
buff: float = 1.00
|
|
hotkey: List[str] = [""] * 14
|
|
技能队列 = []
|
|
护石技能 = []
|
|
护石栏 = []
|
|
符文 = []
|
|
skills_passive: Dict = {}
|
|
融合列表 = []
|
|
武器融合 = []
|
|
|
|
装扮栏: Dict[str, int] = {}
|
|
装扮选项: Dict[str, str] = {}
|
|
|
|
# 职业技能特殊选项
|
|
individuation: Dict[str, int] = {}
|
|
|
|
技攻列表: Dict[str, List[float]] = {}
|
|
|
|
打造: Dict = {}
|
|
觉醒技能 = []
|
|
冷却缩减 = 1.0
|
|
冷却恢复 = 0.0
|
|
tip_part: List[str] = []
|
|
trigger_set = {}
|
|
eq_params = {}
|
|
suits = []
|
|
特性列表 = []
|
|
|
|
def __init__(self, equVersion="") -> None:
|
|
self.equVersion = equVersion
|
|
self.eq_params = {}
|
|
# 计算变量 ##########
|
|
self.__基础力量: int = 0
|
|
self.__基础智力: int = 0
|
|
self.__基础体力: int = 0
|
|
self.__基础精神: int = 0
|
|
|
|
self.进图力量: int = 0
|
|
self.进图智力: int = 0
|
|
self.__进图体力: int = 0
|
|
self.__进图精神: int = 0
|
|
self.__进图三攻: int = 0
|
|
self.__BUFF补正智力: int = 0
|
|
self.__BUFF补正体力: int = 0
|
|
self.__BUFF补正精神: int = 0
|
|
|
|
self.__力量: int = 0
|
|
self.__智力: int = 0
|
|
self.__体力: int = 0
|
|
self.__精神: int = 0
|
|
|
|
self.系统奶系数: float = 0.0
|
|
self.系统奶基数: float = 0.0
|
|
|
|
self.冷却缩减 = 1.0
|
|
self.冷却恢复 = 0
|
|
|
|
self.斗神宠物 = 1.0
|
|
# self.年宠技能 = False
|
|
# self.白兔子技能 = False
|
|
# self.斗神之吼秘药 = False
|
|
|
|
self.辅助对象力智 = 5000
|
|
self.辅助对象三攻 = 3000
|
|
|
|
self.__物理攻击力: int = 65
|
|
self.__魔法攻击力: int = 65
|
|
self.__独立攻击力: int = 1134
|
|
self.__火属性强化: float = 13
|
|
self.__冰属性强化: float = 13
|
|
self.__光属性强化: float = 13
|
|
self.__暗属性强化: float = 13
|
|
|
|
# 旧词条
|
|
self.__百分比力智: float = 0.0
|
|
self.__百分比三攻: float = 0.0
|
|
self.__伤害增加: float = 0.0
|
|
self.__附加伤害: float = 0.0
|
|
self.__属性附加: float = 0.0
|
|
self.__暴击伤害: float = 0.0
|
|
self.__最终伤害: float = 0.0
|
|
self.技能攻击力: float = 1.0
|
|
self.__面板技能攻击力: float = 1.0
|
|
self.技能攻击力累加: float = 0.0
|
|
self.__持续伤害: float = 0.0
|
|
self.__加算冷却缩减: float = 0.0
|
|
self.__百分比减防: float = 0.0
|
|
self.__固定减防: int = 0
|
|
self.__buff固定力智: int = 0
|
|
self.__buff百分比力智: float = 1.0
|
|
self.__buff固定三攻: int = 0
|
|
self.__buff百分比三攻: float = 1.0
|
|
|
|
self.__觉醒固定力智: int = 0
|
|
self.__觉醒百分比力智: float = 1.0
|
|
self.__觉醒百分比力智Total: float = 1.0
|
|
|
|
# 其它词条
|
|
self.__攻击速度: float = 0.00
|
|
self.__攻击速度_其他: float = 0.00
|
|
self.__移动速度: float = 0.00
|
|
self.__施放速度: float = 0.00
|
|
self.__命中率: float = 0.0
|
|
self.__回避率: float = 0.0
|
|
self.__物理暴击率: float = 0.00
|
|
self.__魔法暴击率: float = 0.00
|
|
self.__火属性抗性: int = 0
|
|
self.__冰属性抗性: int = 0
|
|
self.__光属性抗性: int = 0
|
|
self.__暗属性抗性: int = 0
|
|
|
|
self.属强抗性倍率 = 1.0
|
|
|
|
# 新属性
|
|
self.__攻击强化: int = 0
|
|
self.__百分比攻击强化: float = 0.0
|
|
self.__buff量: int = 0
|
|
self.__百分比buff量: float = 0.0
|
|
self.__基础精通倍率: float = 1.0
|
|
self.伤害比例: Dict[str, float] = {
|
|
"直伤": 1.0,
|
|
"中毒": 0.0,
|
|
"灼伤": 0.0,
|
|
"感电": 0.0,
|
|
"出血": 0.0,
|
|
}
|
|
self.伤害系数: Dict[str, float] = {
|
|
"中毒": 1.0,
|
|
"灼伤": 1.0,
|
|
"感电": 1.0,
|
|
"出血": 1.0,
|
|
}
|
|
self.特效 = []
|
|
self.__异常抗性: Dict[str, float] = {}
|
|
self.__异常抗性_职业基础: Dict[str, float] = {}
|
|
self.__指令效果: Dict[str, float] = {}
|
|
self.__MP消耗量: float = 1.0
|
|
self.觉醒技能 = []
|
|
|
|
self.skills_passive = {}
|
|
self.异常基础加成 = {
|
|
"中毒": 1.1,
|
|
"灼伤": 1.0,
|
|
"感电": 1.05,
|
|
"出血": 1.1,
|
|
"灼伤破冰": 1.1,
|
|
}
|
|
self.异常结算加成 = {
|
|
"中毒": 1.0,
|
|
"灼伤": 1.0,
|
|
"感电": 1.0,
|
|
"出血": 1.0,
|
|
"灼伤破冰": 1.0,
|
|
}
|
|
self.异常时间 = {
|
|
# 基础持续时间 持续时间增加值 持续时间增加率 CD
|
|
"中毒": [5, 0, 1.0, 99],
|
|
"灼伤": [5, 0, 1.0, 99],
|
|
"感电": [10, 0, 1.0, 99],
|
|
"出血": [3, 0, 1.0, 99],
|
|
"冰冻": [5, 0, 10, 99],
|
|
}
|
|
self.打造 = {}
|
|
self.trigger_set = {}
|
|
for item in 部位列表 + ("称号", "宠物"):
|
|
self.打造[item] = {
|
|
# 成长
|
|
"attack": [0] * 4,
|
|
# 成长
|
|
"buffer": [0] * 4,
|
|
# 强化
|
|
"强化四维": [0] * 4,
|
|
# 增幅
|
|
"增幅四维": [0] * 4,
|
|
# 攻击力
|
|
"强化攻击力": [0] * 3,
|
|
# 独立,四维
|
|
"锻造加成": [0] * 2,
|
|
"params": [[None]] * 4,
|
|
"tips": [],
|
|
}
|
|
|
|
self.tip_part = []
|
|
if self.转职 == "":
|
|
self.转职 = self.职业
|
|
|
|
# 设置基础属性
|
|
self.__设置基础属性()
|
|
self.技攻列表 = {}
|
|
|
|
def __设置基础属性(self):
|
|
temp = 获取基础属性(self.角色, self.职业)
|
|
self.__基础力量 = temp[0]
|
|
self.__基础智力 = temp[1]
|
|
self.__基础体力 = temp[2]
|
|
self.__基础精神 = temp[3]
|
|
|
|
self.__力量 = self.__基础力量
|
|
self.__智力 = self.__基础智力
|
|
self.__体力 = self.__基础体力
|
|
self.__精神 = self.__基础精神
|
|
|
|
temp = 获取属性抗性基础(self.角色, self.职业)
|
|
self.__火属性抗性 += temp[0]
|
|
self.__冰属性抗性 += temp[1]
|
|
self.__光属性抗性 += temp[2]
|
|
self.__暗属性抗性 += temp[3]
|
|
|
|
temp = 获取异常抗性基础(self.角色, self.职业)
|
|
|
|
异常状态 = [
|
|
"出血",
|
|
"中毒",
|
|
"灼伤",
|
|
"感电",
|
|
"冰冻",
|
|
"减速",
|
|
"眩晕",
|
|
"诅咒",
|
|
"失明",
|
|
"石化",
|
|
"睡眠",
|
|
"混乱",
|
|
"束缚",
|
|
]
|
|
for index in range(0, len(异常状态)):
|
|
self.异常抗性加成(异常状态[index], temp[index], mode=0)
|
|
|
|
def 职业特殊设置(self):
|
|
pass
|
|
|
|
# region 返回前端信息
|
|
|
|
def getinfo(self) -> Dict:
|
|
info = {}
|
|
info["alter"] = self.实际名称
|
|
info["version"] = self.version
|
|
info["name"] = self.名称
|
|
info["character"] = self.职业
|
|
info["role"] = "buffer" if self.类型 == "辅助" else "delear"
|
|
info["weapon_types"] = self.武器选项
|
|
info["carry_type_list"] = self.输出类型选项
|
|
info["armor"] = self.防具类型
|
|
info["armor_mastery"] = self.防具精通属性
|
|
info["buff_ratio"] = self.buff
|
|
self.set_skill_info(info)
|
|
self.set_individuation(info)
|
|
dress_list = {}
|
|
i = 0
|
|
for dress in 装扮集合:
|
|
部位 = dress.部位
|
|
if 部位 not in dress_list:
|
|
dress_list[部位] = []
|
|
选项集合 = dress.选项集合
|
|
if dress.部位 == "上衣":
|
|
选项集合 = 选项集合 + tuple(info["clothes_coat"])
|
|
elif dress.部位 == "下装":
|
|
选项集合 = 选项集合 + tuple(info["clothes_pants"])
|
|
data = {}
|
|
data["id"] = i
|
|
data["options"] = 选项集合
|
|
data["part"] = 部位
|
|
data["rarity"] = dress.品质
|
|
data["suit"] = dress.套装
|
|
data["name"] = "{品质}装扮{部位}".format(品质=dress.品质, 部位=dress.部位)
|
|
i += 1
|
|
dress_list[部位].append(data)
|
|
info["dress"] = dress_list
|
|
info["enchanting"] = get_enchanting_setinfo(self)
|
|
info["emblem"] = get_emblems_setinfo(self)
|
|
info["jade"] = get_jade_setinfo()
|
|
info["especificity"] = get_equ(self.equVersion).get_funs_info(
|
|
"specificity", self
|
|
)
|
|
info["asrahan"] = get_equ(self.equVersion).get_funs_info("asrahan", self)
|
|
info["sundries"] = get_sundries_setinfo()
|
|
|
|
for item in info["platinum"]:
|
|
info["emblem"].append(
|
|
{
|
|
"id": item,
|
|
"maxFame": 232,
|
|
"position": ["辅助装备", "魔法石"],
|
|
"props": item + " Lv+1" + " 四维 + 8",
|
|
"type": "技能",
|
|
"rarity": "白金",
|
|
"rate": 2000,
|
|
}
|
|
)
|
|
return info
|
|
|
|
def set_skills(self):
|
|
pass
|
|
|
|
def get_acitve_skill_detail(
|
|
self, skill, temp_info, temp_char, weapon, ratio, skill_info
|
|
):
|
|
if skill.是否有伤害:
|
|
if len(skill.形态) == 0:
|
|
skill.形态 = [""]
|
|
if (
|
|
self.实际名称 == "elven_knight"
|
|
and len(list(filter(lambda x: "6c" in x, skill.形态))) > 0
|
|
):
|
|
skill.形态 = list(filter(lambda x: "6c" in x, skill.形态))
|
|
for 形态 in skill.形态:
|
|
original = 0
|
|
for i in ["直伤", "中毒", "灼伤", "感电", "出血"]:
|
|
original += skill.等效百分比(
|
|
char=temp_info, 武器类型=weapon, 形态=形态, 伤害类型=i
|
|
)
|
|
skill_info["skills_active"].append(
|
|
{
|
|
"name": skill.名称,
|
|
"need_level": skill.所在等级,
|
|
"lv": skill.等级,
|
|
"data": original * ratio * skill.被动倍率,
|
|
"cd": skill.等效CD(武器类型=weapon, 输出类型=temp_info.类型, char=temp_info),
|
|
"mode": 形态,
|
|
"cost": skill.无色消耗,
|
|
"tp": skill.TP等级,
|
|
}
|
|
)
|
|
if skill.是否有护石 == 1:
|
|
temp = temp_char.get_skill_by_name(skill.名称)
|
|
cp = 0
|
|
for i in ["直伤", "中毒", "灼伤", "感电", "出血"]:
|
|
cp += temp.等效百分比(
|
|
char=temp_char, 武器类型=weapon, 形态=形态, 伤害类型=i
|
|
)
|
|
skill_info["skills_cp"].append(
|
|
{
|
|
"name": skill.名称,
|
|
"need_level": skill.所在等级,
|
|
"lv": skill.等级,
|
|
"data": cp * ratio * temp.被动倍率,
|
|
"cd": temp.等效CD(武器类型=weapon, 输出类型=temp_info.类型, char=temp_info),
|
|
"original_data": original * ratio * skill.被动倍率,
|
|
"original_cd": skill.等效CD(
|
|
武器类型=weapon, 输出类型=temp_info.类型, char=temp_info
|
|
),
|
|
"mode": 形态,
|
|
"cost": temp.无色消耗,
|
|
"tp": skill.TP等级,
|
|
}
|
|
)
|
|
pass
|
|
pass
|
|
|
|
def get_passive_skill_detail(self, skill, temp_info):
|
|
if temp_info.类型 == "物理百分比":
|
|
倍率 = skill.物理攻击力倍率(temp_info.武器类型)
|
|
if 倍率 != 1:
|
|
temp_info.skills_passive[skill.名称]["info"].append(
|
|
{
|
|
"type": "物理攻击力",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
倍率 = skill.物理攻击力倍率进图(temp_info.武器类型)
|
|
if 倍率 != 1:
|
|
temp_info.skills_passive[skill.名称]["info"].append(
|
|
{
|
|
"type": "物理攻击力[进图]",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
elif temp_info.类型 == "魔法百分比":
|
|
倍率 = skill.魔法攻击力倍率(temp_info.武器类型)
|
|
if 倍率 != 1:
|
|
temp_info.skills_passive[skill.名称]["info"].append(
|
|
{
|
|
"type": "魔法攻击力",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
倍率 = skill.魔法攻击力倍率进图(temp_info.武器类型)
|
|
if 倍率 != 1:
|
|
temp_info.skills_passive[skill.名称]["info"].append(
|
|
{
|
|
"type": "魔法攻击力[进图]",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
|
|
elif temp_info.类型 == "物理固伤" or temp_info.类型 == "魔法固伤":
|
|
倍率 = skill.独立攻击力倍率(temp_info.武器类型)
|
|
if skill.名称 not in temp_info.skills_passive:
|
|
return
|
|
if 倍率 != 1:
|
|
temp_info.skills_passive[skill.名称]["info"].append(
|
|
{
|
|
"type": "独立攻击力",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
倍率 = skill.独立攻击力倍率进图(temp_info.武器类型)
|
|
if skill.名称 not in temp_info.skills_passive:
|
|
return
|
|
if 倍率 != 1:
|
|
temp_info.skills_passive[skill.名称]["info"].append(
|
|
{
|
|
"type": "独立攻击力[进图]",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
|
|
def 设置觉醒技能(self):
|
|
self.觉醒技能 = []
|
|
for i in self.技能栏:
|
|
if i.是否有伤害 == 1 and i.所在等级 in [50, 85, 100]:
|
|
self.觉醒技能.append(i.名称)
|
|
|
|
def getskillinfos(self):
|
|
# 技能等级、技能TP
|
|
for skill in self.技能栏:
|
|
if skill.是否有伤害:
|
|
skill.TP等级 = skill.TP上限
|
|
skill.等级 = skill.基础等级
|
|
# 宠物
|
|
self.加算冷却缩减(0.05)
|
|
self.技能等级加成("所有", 1, 95, 1)
|
|
# 光环
|
|
self.技能等级加成("所有", 1, 95, 1)
|
|
# 至尊称号
|
|
self.技能等级加成("被动", 95, 95, 1)
|
|
self.职业特殊设置()
|
|
# 白金、时装、BUFF
|
|
self.set_skills()
|
|
|
|
for skill in self.技能栏:
|
|
self.skills_passive[skill.名称] = {
|
|
"info": [],
|
|
"lv": skill.等级,
|
|
"need_lv": skill.所在等级,
|
|
}
|
|
|
|
self.加算冷却计算()
|
|
|
|
ratio = self.buff
|
|
|
|
infos = []
|
|
for weapon in self.武器选项:
|
|
temp_info = deepcopy(self)
|
|
temp_char = deepcopy(self)
|
|
temp_char.护石栏 = []
|
|
for skill in temp_char.技能栏:
|
|
if skill.是否有伤害 and skill.是否有护石 == 1:
|
|
temp_char.护石栏.append(skill.名称)
|
|
skill.装备护石(char=self)
|
|
temp_info.武器类型 = weapon
|
|
temp_info.职业特殊计算()
|
|
temp_info.被动倍率计算()
|
|
if self.类型 == "物理百分比":
|
|
ratio *= temp_info.站街物理攻击力倍率() * temp_info.进图物理攻击力倍率()
|
|
elif self.类型 == "魔法百分比":
|
|
ratio *= temp_info.站街魔法攻击力倍率() * temp_info.进图魔法攻击力倍率()
|
|
elif self.类型 == "物理固伤":
|
|
ratio *= temp_info.站街独立攻击力倍率() * temp_info.进图独立攻击力倍率()
|
|
elif self.类型 == "魔法固伤":
|
|
ratio *= temp_info.站街独立攻击力倍率() * temp_info.进图独立攻击力倍率()
|
|
temp_info.CD倍率计算()
|
|
temp_info.伤害指数计算()
|
|
temp_char.武器类型 = weapon
|
|
temp_char.职业特殊计算()
|
|
temp_char.被动倍率计算()
|
|
temp_char.CD倍率计算()
|
|
temp_char.伤害指数计算()
|
|
skill_info = {
|
|
"weapon": weapon,
|
|
"skills_active": [],
|
|
"skills_passive": [],
|
|
"skills_cp": [],
|
|
"type": temp_info.类型,
|
|
"buff": temp_info.buff,
|
|
}
|
|
for skill in temp_info.技能栏:
|
|
self.get_acitve_skill_detail(
|
|
skill, temp_info, temp_char, weapon, ratio, skill_info
|
|
)
|
|
self.get_passive_skill_detail(skill, temp_info)
|
|
for i in temp_info.skills_passive:
|
|
skill = temp_info.skills_passive[i]
|
|
if len(skill["info"]) > 0:
|
|
for item in skill["info"]:
|
|
skill_info["skills_passive"].append(
|
|
{
|
|
"name": i,
|
|
"need_level": skill["need_lv"],
|
|
"lv": temp_info.get_skill_by_name(i).等级,
|
|
"data": item["info"][0],
|
|
"type": item["type"],
|
|
"remark": "{}{}".format(
|
|
"、".join(item["info"][1].split(",")),
|
|
"({}除外)".format(
|
|
"、".join(item["info"][2].split(","))
|
|
)
|
|
if item["info"][2] != "无"
|
|
and item["info"][2] != ""
|
|
and item["info"][2] != 0
|
|
else "",
|
|
),
|
|
}
|
|
)
|
|
infos.append(skill_info)
|
|
return infos
|
|
|
|
def 基础属性加成(
|
|
self,
|
|
物理攻击力=0.00,
|
|
魔法攻击力=0.00,
|
|
独立攻击力=0.00,
|
|
三攻=0,
|
|
力量=0.00,
|
|
智力=0,
|
|
力智=0,
|
|
体力=0,
|
|
精神=0,
|
|
体精=0,
|
|
四维=0,
|
|
物理暴击率=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,
|
|
):
|
|
self.__物理攻击力 += 物理攻击力 + 三攻
|
|
self.__魔法攻击力 += 魔法攻击力 + 三攻
|
|
self.__独立攻击力 += 独立攻击力 + 三攻
|
|
self.__力量 += 力量 + 力智 + 四维
|
|
self.__智力 += 智力 + 力智 + 四维
|
|
self.__体力 += 体力 + 体精 + 四维
|
|
self.__精神 += 精神 + 体精 + 四维
|
|
self.__物理暴击率 += float(物理暴击率) + float(暴击率)
|
|
self.__魔法暴击率 += float(魔法暴击率) + float(暴击率)
|
|
self.__攻击速度 += float(攻击速度) + float(三速)
|
|
self.__施放速度 += float(施放速度) + float(三速)
|
|
self.__移动速度 += float(移动速度) + float(三速)
|
|
self.__火属性抗性 += 火属性抗性 + 所有属性抗性
|
|
self.__光属性抗性 += 光属性抗性 + 所有属性抗性
|
|
self.__冰属性抗性 += 冰属性抗性 + 所有属性抗性
|
|
self.__暗属性抗性 += 暗属性抗性 + 所有属性抗性
|
|
self.进图力量 += 进图力量
|
|
self.进图智力 += 进图智力
|
|
for 类型 in [
|
|
"中毒",
|
|
"灼伤",
|
|
"感电",
|
|
"出血",
|
|
"冰冻",
|
|
"减速",
|
|
"眩晕",
|
|
"诅咒",
|
|
"失明",
|
|
"石化",
|
|
"睡眠",
|
|
"混乱",
|
|
"束缚",
|
|
]:
|
|
self.__异常抗性[类型] = self.__异常抗性.get(类型, 0.0) + 所有异常抗性
|
|
self.__异常抗性_职业基础[类型] = (
|
|
self.__异常抗性_职业基础.get(类型, 0.0) + 所有职业异常抗性
|
|
)
|
|
super().基础属性加成(
|
|
物理攻击力,
|
|
魔法攻击力,
|
|
独立攻击力,
|
|
三攻,
|
|
力量,
|
|
智力,
|
|
力智,
|
|
体力,
|
|
精神,
|
|
体精,
|
|
四维,
|
|
物理暴击率,
|
|
魔法暴击率,
|
|
暴击率,
|
|
攻击速度,
|
|
施放速度,
|
|
移动速度,
|
|
三速,
|
|
火属性抗性,
|
|
光属性抗性,
|
|
冰属性抗性,
|
|
暗属性抗性,
|
|
所有属性抗性,
|
|
所有异常抗性,
|
|
所有职业异常抗性,
|
|
进图力量,
|
|
进图智力,
|
|
)
|
|
|
|
def set_skill_info(
|
|
self, info, rune_except=[], clothes_pants=[], rune_start_lv=20
|
|
) -> None:
|
|
skillInfo = [] # 技能
|
|
rune = [] # 符文
|
|
talisman = [] # 护石
|
|
platinum = [] # 白金
|
|
clothes_coat = [] # 时装
|
|
for skill in self.技能栏:
|
|
skill.等级 = skill.基础等级
|
|
skillInfo.append(
|
|
{
|
|
"name": skill.名称,
|
|
"type": skill.是否有伤害,
|
|
"need_level": skill.所在等级,
|
|
"level_master": skill.等级精通,
|
|
"level_max": skill.等级上限,
|
|
"cooldown": 0
|
|
if not skill.是否有伤害
|
|
else (
|
|
skill.CD[skill.等级] if isinstance(skill.CD, list) else skill.CD
|
|
),
|
|
"current_level": skill.基础等级,
|
|
"data": 0 if not skill.是否有伤害 else skill.等效百分比(char=self),
|
|
"tp_max": skill.TP上限 if skill.是否有伤害 else None,
|
|
"tp_level": skill.TP等级 if skill.是否有伤害 else None,
|
|
"mode": [] if not skill.是否有伤害 else skill.形态,
|
|
}
|
|
)
|
|
# 护石
|
|
if skill.是否有伤害 == 1 and skill.是否有护石 == 1:
|
|
talisman.append(skill.名称)
|
|
# 符文
|
|
if (
|
|
skill.所在等级 >= rune_start_lv
|
|
and skill.所在等级 <= 80
|
|
and skill.所在等级 != 50
|
|
and (
|
|
skill.是否有伤害 == 1
|
|
or (skill.是否主动 == 1 and self.类型 == "辅助")
|
|
)
|
|
and skill.名称 not in rune_except
|
|
):
|
|
rune.append(skill.名称)
|
|
# 白金
|
|
if (
|
|
skill.所在等级 >= 15
|
|
and skill.所在等级 <= 70
|
|
and skill.所在等级 not in [48, 50]
|
|
):
|
|
platinum.append(skill.名称)
|
|
# 时装
|
|
if skill.所在等级 <= 95:
|
|
clothes_coat.append(skill.名称)
|
|
if self.类型 == "辅助":
|
|
talisman += self.护石技能
|
|
info["skills"] = skillInfo
|
|
info["rune"] = rune
|
|
info["talisman"] = talisman
|
|
info["platinum"] = platinum
|
|
info["clothes_coat"] = clothes_coat
|
|
info["clothes_pants"] = clothes_pants
|
|
|
|
def set_individuation(self, info) -> None:
|
|
pass
|
|
|
|
# endregion
|
|
|
|
# region 词条属性
|
|
def set_eq_params(self, key, value):
|
|
self.eq_params[key] = value
|
|
|
|
def add_eq_params(self, key, value, default=0):
|
|
self.eq_params[key] = self.eq_params.get(key, default) + value
|
|
|
|
def multiply_eq_params(self, key, value, default=1):
|
|
self.eq_params[key] = self.eq_params.get(key, default) * value
|
|
|
|
def get_eq_params(self, key, default=0):
|
|
return self.eq_params.get(key, default)
|
|
|
|
def 基础精通加成(self, x: float) -> None:
|
|
self.__基础精通倍率 *= 1 + x
|
|
|
|
def 百分比防御减少(self, x: float) -> None:
|
|
self.__百分比减防 += x
|
|
|
|
def 固定防御减少(self, x: int) -> None:
|
|
self.__固定减防 += x
|
|
|
|
def 伤害类型转化(self, 类型1: str, 类型2: str, x: float) -> None:
|
|
# 直伤 中毒 灼伤 感电 出血
|
|
# if self.伤害比例.get(类型1, 0.0) - x <= 0:
|
|
# pass
|
|
self.伤害比例[类型1] = max(self.伤害比例.get(类型1, 0.0) - x, 0)
|
|
self.伤害比例[类型2] = self.伤害比例.get(类型2, 0.0) + x
|
|
|
|
def 异常增伤(self, 类型: str, x: float) -> None:
|
|
# 中毒 灼伤 感电 出血
|
|
self.伤害系数[类型] = self.伤害系数.get(类型, 1.0) + x
|
|
|
|
def 异常抗性加成(self, 类型: str, x: float, mode: int = 1) -> None:
|
|
# 中毒 灼伤 感电 出血 冰冻 减速 眩晕 诅咒 失明 石化 睡眠 混乱 束缚
|
|
if mode == 1:
|
|
self.__异常抗性[类型] = self.__异常抗性.get(类型, 0.0) + x
|
|
else:
|
|
self.__异常抗性_职业基础[类型] = self.__异常抗性_职业基础.get(类型, 0.0) + x
|
|
|
|
def 异常抗性获取(self, 类型: str, mode: int = 1) -> float:
|
|
# mode = 1 显示抗性 mode = 0 装备加成抗性
|
|
return round(
|
|
self.__异常抗性.get(类型, 0.0)
|
|
+ (self.__异常抗性_职业基础.get(类型, 0.0) if mode == 1 else 0.0),
|
|
4,
|
|
)
|
|
|
|
def 属性攻击(self, 类型: str) -> None:
|
|
pass
|
|
|
|
def 所有异常抗性加成(self, x: float, mode: int = 1) -> None:
|
|
for 类型 in [
|
|
"中毒",
|
|
"灼伤",
|
|
"感电",
|
|
"出血",
|
|
"冰冻",
|
|
"减速",
|
|
"眩晕",
|
|
"诅咒",
|
|
"失明",
|
|
"石化",
|
|
"睡眠",
|
|
"混乱",
|
|
"束缚",
|
|
]:
|
|
self.异常抗性加成(类型, x, mode)
|
|
|
|
def 指令效果加成(self, 类型: str, x: float) -> None:
|
|
# 所有 消耗无色 不消耗无色 (觉醒技能默认除外)
|
|
self.__指令效果[类型] = self.__指令效果.get(类型, 1.0) * (1 + x)
|
|
|
|
def 指令技攻加成(self, x: float, min=1, max=100, exc=[], excName=[]) -> None:
|
|
count = 0
|
|
for i in self.技能栏:
|
|
if (
|
|
i.所在等级 >= min
|
|
and i.所在等级 <= max
|
|
and i.所在等级 not in exc
|
|
and i.手搓
|
|
and i.名称 not in excName
|
|
):
|
|
count += 1
|
|
if i.是否有伤害 == 1:
|
|
i.倍率 *= 1 + x * self.技能伤害增加增幅
|
|
if i.名称 == "鬼连斩":
|
|
self.get_skill_by_name("鬼连斩:极").额外加成 /= (
|
|
1 + x * self.技能伤害增加增幅
|
|
)
|
|
return count
|
|
|
|
def MP消耗量加成(self, x: float) -> None:
|
|
self.__MP消耗量 += x
|
|
|
|
def 攻击强化加成(self, x: float) -> None:
|
|
self.__攻击强化 += x
|
|
|
|
def 百分比攻击强化加成(self, x: float) -> None:
|
|
self.__百分比攻击强化 += x
|
|
super().百分比攻击强化加成(x)
|
|
|
|
def buff量加成(self, x: float) -> None:
|
|
self.__buff量 += x
|
|
|
|
def 辅助属性加成(
|
|
self,
|
|
buff固定力智=0,
|
|
buff百分比力智=0.0,
|
|
buff固定三攻=0,
|
|
buff百分比三攻=0.0,
|
|
觉醒固定力智=0,
|
|
觉醒百分比力智=0.0,
|
|
buff量=0,
|
|
百分比buff量=0.0,
|
|
觉醒百分比力智Total=0.0,
|
|
):
|
|
self.__buff固定力智 += buff固定力智
|
|
self.__buff百分比力智 *= 1.0 + buff百分比力智
|
|
self.__buff固定三攻 += buff固定三攻
|
|
self.__buff百分比三攻 *= 1.0 + buff百分比三攻
|
|
self.__觉醒固定力智 += 觉醒固定力智
|
|
self.__觉醒百分比力智 *= 1.0 + 觉醒百分比力智
|
|
self.__觉醒百分比力智Total *= 1.0 + 觉醒百分比力智Total
|
|
self.__buff量 += buff量
|
|
self.__百分比buff量 += 百分比buff量
|
|
|
|
super().辅助属性加成(
|
|
buff固定力智,
|
|
buff百分比力智,
|
|
buff固定三攻,
|
|
buff百分比三攻,
|
|
觉醒固定力智,
|
|
觉醒百分比力智,
|
|
buff量,
|
|
百分比buff量,
|
|
)
|
|
|
|
def 附加伤害加成(self, x: float, 辟邪玉加成=1) -> None:
|
|
self.__附加伤害 += self.附加伤害增加增幅 * x if 辟邪玉加成 == 1 else x
|
|
|
|
def 持续伤害加成(self, x: float) -> None:
|
|
self.__持续伤害 += x
|
|
|
|
def 属性附加加成(self, x: float) -> None:
|
|
self.__属性附加 += self.属性附加伤害增加增幅 * x
|
|
|
|
def 技能攻击力加成(
|
|
self, x: float, 辟邪玉加成=1, 适用累加=1, part="", show=True
|
|
) -> None:
|
|
if x != 0:
|
|
self.技攻列表[part] = self.技攻列表.get(part, []) + [x]
|
|
last = 0
|
|
if 辟邪玉加成 == 1:
|
|
if 适用累加 == 0:
|
|
last = self.技能伤害增加增幅 * x
|
|
# self.技能攻击力 *= 1 + self.技能伤害增加增幅 * x
|
|
else:
|
|
if self.技能攻击力累加 > 2: # 累计已经大于2不再加成
|
|
# self.技能攻击力 *= 1 + x
|
|
last = x
|
|
elif (
|
|
self.技能攻击力累加 + x > 2
|
|
): # 此次累计导致大于2,一部分加成,一部分不加成
|
|
overflow = self.技能攻击力累加 + x - 2 # 溢出部分
|
|
# self.技能攻击力 *= 1 + self.技能伤害增加增幅 * (x - overflow) + overflow
|
|
last = self.技能伤害增加增幅 * (x - overflow) + overflow
|
|
else: # 累计后仍小于等于2
|
|
# self.技能攻击力 *= 1 + self.技能伤害增加增幅 * x
|
|
last = self.技能伤害增加增幅 * x
|
|
self.技能攻击力累加 += x # 累计计算
|
|
else:
|
|
last = x
|
|
# self.技能攻击力 *= 1 + x
|
|
self.技能攻击力 *= 1 + last
|
|
self.__面板技能攻击力 *= 1 + (last if show else 0)
|
|
# print(self.技攻列表)
|
|
super().技能攻击力加成(x=x)
|
|
|
|
def 暴击伤害加成(self, x: float, 辟邪玉加成=1) -> None:
|
|
self.__暴击伤害 += self.暴击伤害增加增幅 * x if 辟邪玉加成 == 1 else x
|
|
|
|
def 伤害增加加成(self, x: float, 辟邪玉加成=1) -> None:
|
|
self.__伤害增加 += self.伤害增加增幅 * x if 辟邪玉加成 == 1 else x
|
|
|
|
def 最终伤害加成(self, x: float, 辟邪玉加成=1) -> None:
|
|
self.__最终伤害 += self.最终伤害增加增幅 * x if 辟邪玉加成 == 1 else x
|
|
|
|
def 百分比力智加成(self, x: float, 辟邪玉加成=1) -> None:
|
|
self.__百分比力智 += self.力量智力增加增幅 * x if 辟邪玉加成 == 1 else x
|
|
|
|
def 百分比三攻加成(self, x: float, 辟邪玉加成=1) -> None:
|
|
self.__百分比三攻 += self.物理魔法攻击力增加增幅 * x if 辟邪玉加成 == 1 else x
|
|
|
|
def 火属性强化加成(self, x: float, 辟邪玉加成=1, mode=0) -> None:
|
|
if mode == 0:
|
|
self.__火属性强化 += self.所有属性强化增幅 * x if 辟邪玉加成 == 1 else x
|
|
else:
|
|
self.__火属性强化 += int(self.所有属性强化增幅 * x)
|
|
|
|
def 冰属性强化加成(self, x: float, 辟邪玉加成=1, mode=0) -> None:
|
|
if mode == 0:
|
|
self.__冰属性强化 += self.所有属性强化增幅 * x if 辟邪玉加成 == 1 else x
|
|
else:
|
|
self.__冰属性强化 += int(self.所有属性强化增幅 * x)
|
|
|
|
def 光属性强化加成(self, x: float, 辟邪玉加成=1, mode=0) -> None:
|
|
if mode == 0:
|
|
self.__光属性强化 += self.所有属性强化增幅 * x if 辟邪玉加成 == 1 else x
|
|
else:
|
|
self.__光属性强化 += int(self.所有属性强化增幅 * x)
|
|
|
|
def 暗属性强化加成(self, x: float, 辟邪玉加成=1, mode=0) -> None:
|
|
if mode == 0:
|
|
self.__暗属性强化 += self.所有属性强化增幅 * x if 辟邪玉加成 == 1 else x
|
|
else:
|
|
self.__暗属性强化 += int(self.所有属性强化增幅 * x)
|
|
|
|
def 所有属性强化加成(
|
|
self,
|
|
所有属性强化: float = 0,
|
|
火属性强化: float = 0.00,
|
|
冰属性强化: float = 0.00,
|
|
光属性强化: float = 0.00,
|
|
暗属性强化: float = 0.00,
|
|
辟邪玉加成=1,
|
|
mode=0,
|
|
) -> None:
|
|
super().所有属性强化加成(
|
|
所有属性强化, 火属性强化, 冰属性强化, 光属性强化, 暗属性强化
|
|
)
|
|
火属性强化 += 所有属性强化
|
|
冰属性强化 += 所有属性强化
|
|
光属性强化 += 所有属性强化
|
|
暗属性强化 += 所有属性强化
|
|
# if 火属性强化 > 0:
|
|
self.火属性强化加成(火属性强化, 辟邪玉加成, mode)
|
|
# if 冰属性强化 > 0:
|
|
self.冰属性强化加成(冰属性强化, 辟邪玉加成, mode)
|
|
# if 光属性强化 > 0:
|
|
self.光属性强化加成(光属性强化, 辟邪玉加成, mode)
|
|
# if 暗属性强化 > 0:
|
|
self.暗属性强化加成(暗属性强化, 辟邪玉加成, mode)
|
|
# if mode == 0:
|
|
# temp = self.所有属性强化增幅 * 所有属性强化 if 辟邪玉加成 == 1 else 所有属性强化
|
|
# else:
|
|
# temp = int(self.所有属性强化增幅 * 所有属性强化)
|
|
# self.__所有属性强化(temp)
|
|
# super().属性强化加成(所有属性强化=所有属性强化)
|
|
|
|
def 火属性抗性加成(self, x: int) -> None:
|
|
self.__火属性抗性 += x
|
|
|
|
def 冰属性抗性加成(self, x: int) -> None:
|
|
self.__冰属性抗性 += x
|
|
|
|
def 光属性抗性加成(self, x: int) -> None:
|
|
self.__光属性抗性 += x
|
|
|
|
def 暗属性抗性加成(self, x: int) -> None:
|
|
self.__暗属性抗性 += x
|
|
|
|
def 所有属性抗性加成(self, x: int) -> None:
|
|
self.火属性抗性加成(x)
|
|
self.冰属性抗性加成(x)
|
|
self.光属性抗性加成(x)
|
|
self.暗属性抗性加成(x)
|
|
|
|
def 攻击速度增加(self, x: float, part: str = "") -> None:
|
|
if part != "武器" and part != "特性":
|
|
self.__攻击速度 += x
|
|
else:
|
|
self.__攻击速度_其他 += x
|
|
|
|
def 攻击速度(self) -> float:
|
|
return self.__攻击速度
|
|
|
|
def 移动速度增加(self, x: float) -> None:
|
|
self.__移动速度 += x
|
|
|
|
def 施放速度增加(self, x: float) -> None:
|
|
self.__施放速度 += x
|
|
|
|
def 所有速度增加(self, x: float, part: str = "") -> None:
|
|
if part != "武器" and part != "特性":
|
|
self.__攻击速度 += x
|
|
else:
|
|
self.__攻击速度_其他 += x
|
|
self.__移动速度 += x
|
|
self.__施放速度 += x
|
|
|
|
def 命中率增加(self, x: float) -> None:
|
|
self.__命中率 += x
|
|
|
|
def 回避率增加(self, x: float) -> None:
|
|
self.__回避率 += x
|
|
|
|
def 物理暴击率增加(self, x: float) -> None:
|
|
self.__物理暴击率 += x
|
|
|
|
def 魔法暴击率增加(self, x: float) -> None:
|
|
self.__魔法暴击率 += x
|
|
|
|
def 暴击率增加(self, x: float) -> None:
|
|
self.物理暴击率增加(x)
|
|
self.魔法暴击率增加(x)
|
|
|
|
def buff技能等级加成(self, LV: int, lv: int) -> None:
|
|
# LV级 buff技能等级 + lv
|
|
pass
|
|
|
|
def 特殊主动等级加成(self, Lv: int, lv: int) -> None:
|
|
for i in self.技能栏:
|
|
if (
|
|
i.所在等级 == Lv
|
|
and i.是否主动 == 1
|
|
and i.名称 not in ["念兽:龙虎啸", "风雷啸", "圣灵符文", "神圣之光"]
|
|
):
|
|
i.等级加成(lv, char=self)
|
|
|
|
def 技能获取(self, min: int, max: int, exc=[]) -> None:
|
|
temp = []
|
|
for i in self.技能栏:
|
|
if (
|
|
i.所在等级 >= min
|
|
and i.所在等级 <= max
|
|
and i.是否主动 == 1
|
|
and i.名称 not in exc
|
|
):
|
|
temp.append(i.名称)
|
|
return temp
|
|
|
|
def 技能等级加成(
|
|
self, 加成类型: str, min: int, max: int, lv: int, exc=[], excName=[]
|
|
) -> None:
|
|
for i in self.技能栏:
|
|
if (
|
|
i.所在等级 >= min
|
|
and i.所在等级 <= max
|
|
and i.所在等级 not in exc
|
|
and i.名称 not in excName
|
|
):
|
|
if 加成类型 == "所有":
|
|
i.等级加成(lv, char=self)
|
|
else:
|
|
if (i.是否主动 == 1) == (加成类型 == "主动"):
|
|
i.等级加成(lv, char=self)
|
|
|
|
super().技能等级加成(加成类型, min, max, lv, exc)
|
|
|
|
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, cost=0, x=0, min=1, max=100):
|
|
# 不消耗无色的技能加成
|
|
if cost == 0:
|
|
for skill in self.技能队列:
|
|
if not (min == 1 and max == 100):
|
|
lv = self.get_skill_by_name(skill["名称"]).所在等级
|
|
if lv < min or lv > max:
|
|
continue
|
|
if (
|
|
skill["名称"] == "神罚之锤"
|
|
and self.实际名称 == "crusader_male_carry"
|
|
):
|
|
skill["倍率"] *= (
|
|
1 + x * self.get_skill_by_name("神罚之锤").非无色占比()
|
|
)
|
|
elif skill["无色消耗"] == 0 and skill["名称"] != "鬼连斩:极":
|
|
skill["倍率"] *= 1 + x
|
|
pass
|
|
if cost > 0:
|
|
for skill in self.技能队列:
|
|
if not (min == 1 and max == 100):
|
|
lv = self.get_skill_by_name(skill["名称"]).所在等级
|
|
if lv < min or lv > max:
|
|
continue
|
|
if (
|
|
skill["名称"] == "神罚之锤"
|
|
and self.实际名称 == "crusader_male_carry"
|
|
):
|
|
skill["倍率"] *= (
|
|
1 + x * self.get_skill_by_name("神罚之锤").无色占比()
|
|
)
|
|
elif skill["无色消耗"] >= cost:
|
|
skill["倍率"] *= 1 + x
|
|
pass
|
|
|
|
def 加算冷却缩减(self, x: float) -> None:
|
|
self.__加算冷却缩减 += 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,
|
|
min: int,
|
|
max: int,
|
|
x: float,
|
|
exc=[],
|
|
type="all",
|
|
excName=[],
|
|
changeSkill=False,
|
|
) -> None:
|
|
for i in self.技能栏:
|
|
if (
|
|
i.所在等级 >= min
|
|
and i.所在等级 <= max
|
|
and i.所在等级 not in exc
|
|
and i.名称 not in excName
|
|
):
|
|
if i.是否有伤害 == 1:
|
|
if type == "all" or (type == "active" and i.是否主动 == 1):
|
|
if changeSkill:
|
|
i.倍率 *= 1 + x * self.技能伤害增加增幅
|
|
else:
|
|
i.技攻 *= 1 + x * self.技能伤害增加增幅
|
|
|
|
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.倍率 *= 倍率
|
|
i.CDR *= CD
|
|
|
|
def __所有属性强化(self, x: float) -> None:
|
|
self.__火属性强化 += x
|
|
self.__冰属性强化 += x
|
|
self.__光属性强化 += x
|
|
self.__暗属性强化 += x
|
|
|
|
def 斗神宠物加成(self, x: float) -> None:
|
|
self.斗神宠物 += x
|
|
|
|
# endregion
|
|
|
|
# region 面板相关函数
|
|
|
|
# 基础力量智力(站街力量智力)
|
|
def 站街力量(self) -> int:
|
|
return int(self.__力量)
|
|
|
|
def 站街智力(self) -> int:
|
|
return int(self.__智力)
|
|
|
|
def MP消耗倍率(self) -> float:
|
|
return self.__MP消耗量
|
|
|
|
def 火属性强化(self) -> float:
|
|
if self.check_fun_by_id(20045):
|
|
return max(
|
|
[
|
|
self.__火属性强化,
|
|
self.__冰属性强化,
|
|
self.__光属性强化,
|
|
self.__暗属性强化,
|
|
]
|
|
)
|
|
return self.__火属性强化
|
|
|
|
def 冰属性强化(self) -> float:
|
|
if self.check_fun_by_id(20045):
|
|
return max(
|
|
[
|
|
self.__火属性强化,
|
|
self.__冰属性强化,
|
|
self.__光属性强化,
|
|
self.__暗属性强化,
|
|
]
|
|
)
|
|
return self.__冰属性强化
|
|
|
|
def 光属性强化(self) -> float:
|
|
if self.check_fun_by_id(20045):
|
|
return max(
|
|
[
|
|
self.__火属性强化,
|
|
self.__冰属性强化,
|
|
self.__光属性强化,
|
|
self.__暗属性强化,
|
|
]
|
|
)
|
|
return self.__光属性强化
|
|
|
|
def 暗属性强化(self) -> float:
|
|
if self.check_fun_by_id(20045):
|
|
return max(
|
|
[
|
|
self.__火属性强化,
|
|
self.__冰属性强化,
|
|
self.__光属性强化,
|
|
self.__暗属性强化,
|
|
]
|
|
)
|
|
return self.__暗属性强化
|
|
|
|
def 火属性抗性(self) -> float:
|
|
return int(self.__火属性抗性 * self.属强抗性倍率)
|
|
|
|
def 冰属性抗性(self) -> float:
|
|
return int(self.__冰属性抗性 * self.属强抗性倍率)
|
|
|
|
def 光属性抗性(self) -> float:
|
|
return int(self.__光属性抗性 * self.属强抗性倍率)
|
|
|
|
def 暗属性抗性(self) -> float:
|
|
return int(self.__暗属性抗性 * self.属强抗性倍率)
|
|
|
|
def 被动力智系数(self) -> float:
|
|
return 0
|
|
|
|
# 新词条计算的力量智力
|
|
|
|
def 基础面板力量(self) -> float:
|
|
return (
|
|
(
|
|
self.__力量
|
|
+ int(
|
|
(self.__力量 - self.__基础力量) * self.系统奶系数 + self.系统奶基数
|
|
)
|
|
)
|
|
+ self.进图力量
|
|
) * (1 + self.被动力智系数())
|
|
|
|
def 基础面板智力(self) -> float:
|
|
return (
|
|
(
|
|
self.__智力
|
|
+ int(
|
|
(self.__智力 - self.__基础智力) * self.系统奶系数 + self.系统奶基数
|
|
)
|
|
)
|
|
+ self.进图智力
|
|
) * (1 + self.被动力智系数())
|
|
|
|
# 旧词条计算的力量智力(图内力量智力)
|
|
|
|
def 面板力量(self) -> float:
|
|
return (self.基础面板力量()) * (1 + self.__百分比力智)
|
|
|
|
def 面板智力(self) -> float:
|
|
return (self.基础面板智力()) * (1 + self.__百分比力智)
|
|
|
|
# 站街生效的技能三攻倍率
|
|
|
|
def 站街物理攻击力倍率(self) -> float:
|
|
站街物理攻击倍率 = 1.0
|
|
for i in self.技能栏:
|
|
if hasattr(i, "物理攻击力倍率"):
|
|
倍率 = i.物理攻击力倍率(self.武器类型)
|
|
if 倍率 != 1 and 倍率 is not None:
|
|
站街物理攻击倍率 *= 倍率
|
|
return 站街物理攻击倍率
|
|
|
|
def 站街魔法攻击力倍率(self) -> float:
|
|
站街魔法攻击倍率 = 1.0
|
|
for i in self.技能栏:
|
|
if hasattr(i, "魔法攻击力倍率"):
|
|
倍率 = i.魔法攻击力倍率(self.武器类型)
|
|
if 倍率 != 1 and 倍率 is not None:
|
|
站街魔法攻击倍率 *= 倍率
|
|
return 站街魔法攻击倍率
|
|
|
|
def 站街独立攻击力倍率(self) -> float:
|
|
站街独立攻击倍率 = 1.0
|
|
for i in self.技能栏:
|
|
if hasattr(i, "独立攻击力倍率"):
|
|
倍率 = i.独立攻击力倍率(self.武器类型)
|
|
if 倍率 != 1 and 倍率 is not None:
|
|
站街独立攻击倍率 *= 倍率
|
|
return 站街独立攻击倍率
|
|
|
|
def 进图物理攻击力倍率(self) -> float:
|
|
进图物理攻击倍率 = 1.0
|
|
for i in self.技能栏:
|
|
if hasattr(i, "物理攻击力倍率进图"):
|
|
倍率 = i.物理攻击力倍率进图(self.武器类型)
|
|
if 倍率 != 1 and 倍率 is not None:
|
|
进图物理攻击倍率 *= 倍率
|
|
return 进图物理攻击倍率
|
|
|
|
def 进图魔法攻击力倍率(self) -> float:
|
|
进图魔法攻击倍率 = 1.0
|
|
for i in self.技能栏:
|
|
if hasattr(i, "魔法攻击力倍率进图"):
|
|
倍率 = i.魔法攻击力倍率进图(self.武器类型)
|
|
if 倍率 != 1 and 倍率 is not None:
|
|
进图魔法攻击倍率 *= 倍率
|
|
return 进图魔法攻击倍率
|
|
|
|
def 进图独立攻击力倍率(self) -> float:
|
|
进图独立攻击倍率 = 1.0
|
|
for i in self.技能栏:
|
|
if hasattr(i, "独立攻击力倍率进图"):
|
|
倍率 = i.独立攻击力倍率进图(self.武器类型)
|
|
if 倍率 != 1 and 倍率 is not None:
|
|
进图独立攻击倍率 *= 倍率
|
|
return 进图独立攻击倍率
|
|
|
|
# 站街三攻
|
|
|
|
def 站街物理攻击力(self) -> float:
|
|
return self.__物理攻击力 * self.站街物理攻击力倍率()
|
|
|
|
def 站街魔法攻击力(self) -> float:
|
|
return self.__魔法攻击力 * self.站街魔法攻击力倍率()
|
|
|
|
def 站街独立攻击力(self) -> float:
|
|
return self.__独立攻击力 * self.站街独立攻击力倍率()
|
|
|
|
# 新词条计算的三攻(旧词条需要额外乘百分比三攻)
|
|
|
|
def 基础面板物理攻击力(self) -> float:
|
|
面板物理攻击 = self.__物理攻击力 + int(self.__进图三攻)
|
|
for i in self.技能栏:
|
|
面板物理攻击 *= i.物理攻击力倍率进图(self.武器类型)
|
|
return 面板物理攻击 * self.站街物理攻击力倍率()
|
|
|
|
def 基础面板魔法攻击力(self) -> float:
|
|
面板魔法攻击 = self.__魔法攻击力 + int(self.__进图三攻)
|
|
for i in self.技能栏:
|
|
面板魔法攻击 *= i.魔法攻击力倍率进图(self.武器类型)
|
|
return 面板魔法攻击 * self.站街魔法攻击力倍率()
|
|
|
|
def 基础面板独立攻击力(self) -> float:
|
|
面板独立攻击 = self.__独立攻击力 + int(self.__进图三攻)
|
|
for i in self.技能栏:
|
|
面板独立攻击 *= i.独立攻击力倍率进图(self.武器类型)
|
|
return 面板独立攻击 * self.站街独立攻击力倍率()
|
|
|
|
# 图内显示的三攻(不参与伤害计算)
|
|
|
|
def 面板物理攻击力(self) -> float:
|
|
面板物理攻击 = (
|
|
self.基础面板物理攻击力() * (1 + self.__百分比三攻) * (self.斗神宠物加成)
|
|
)
|
|
return 面板物理攻击
|
|
|
|
def 面板魔法攻击力(self) -> float:
|
|
面板魔法攻击 = (
|
|
self.基础面板魔法攻击力() * (1 + self.__百分比三攻) * (self.斗神宠物加成)
|
|
)
|
|
return 面板魔法攻击
|
|
|
|
def 面板独立攻击力(self) -> float:
|
|
面板独立攻击 = self.基础面板独立攻击力() * (1 + self.__百分比三攻)
|
|
return 面板独立攻击
|
|
|
|
# endregion
|
|
|
|
# region 其它函数
|
|
# def get_skill_by_name(self, name) -> 技能 | 主动技能 | 被动技能:
|
|
|
|
def 部位是否穿戴(self, part):
|
|
if self.部位装备.get(part, None) is None and part not in [
|
|
"光环",
|
|
"武器装扮",
|
|
"皮肤",
|
|
"宠物装备-红",
|
|
"宠物装备-绿",
|
|
"宠物装备-蓝",
|
|
"快捷装备",
|
|
]:
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
def get_skill_by_name(self, name) -> Union[技能, 主动技能, 被动技能]:
|
|
return self.技能栏[self.技能序号.get(name, 0)]
|
|
|
|
def 已穿戴神话(self):
|
|
for i in self.装备栏:
|
|
temp = get_equ(self.equVersion).get_equ_by_id(i)
|
|
if temp.品质 == "神话":
|
|
return True
|
|
return False
|
|
|
|
def 传说词条等级之和(self):
|
|
total = 0
|
|
for i in self.装备栏:
|
|
temp = get_equ(self.equVersion).get_equ_by_id(i)
|
|
if (
|
|
temp.等级 == 105
|
|
and temp.部位 not in ["称号", "宠物"]
|
|
and temp.品质 == "传说"
|
|
):
|
|
total += sum(self.词条等级.get(temp.部位, [0]))
|
|
return total
|
|
|
|
def 已传说装备数目(self):
|
|
count = 0
|
|
for i in self.装备栏:
|
|
temp = get_equ(self.equVersion).get_equ_by_id(i)
|
|
if (
|
|
temp.等级 == 105
|
|
and temp.部位 not in ["称号", "宠物"]
|
|
and temp.品质 == "传说"
|
|
):
|
|
count += 1
|
|
return count
|
|
|
|
def 穿戴低于105(self):
|
|
for i in self.装备栏:
|
|
temp = get_equ(self.equVersion).get_equ_by_id(i)
|
|
if temp.等级 < 105 and temp.部位 not in ["称号", "宠物"]:
|
|
return True
|
|
return False
|
|
|
|
def 获取强化等级(self, part=[]):
|
|
num = 0
|
|
temp = part
|
|
if len(temp) == 0:
|
|
temp += 部位列表
|
|
for i in temp:
|
|
num += self.打造详情.get(i, {}).get("cursed_number", 0)
|
|
return num
|
|
|
|
def 获取改造等级(self, part=[]):
|
|
num = 0
|
|
temp = part
|
|
if len(temp) == 0:
|
|
temp += 部位列表
|
|
for i in temp:
|
|
num += self.打造详情.get(i, {}).get("wisdom_number", 0)
|
|
return num
|
|
|
|
# endregion
|
|
|
|
# 打造设置
|
|
|
|
def __打造设置(self, setinfo):
|
|
self.打造详情 = setinfo
|
|
for i in 部位列表 + (
|
|
"称号",
|
|
"宠物",
|
|
"光环",
|
|
"武器装扮",
|
|
"皮肤",
|
|
"宠物装备-红",
|
|
"宠物装备-绿",
|
|
"宠物装备-蓝",
|
|
"快捷装备",
|
|
):
|
|
from core.equipment.enchanting import get_encfunc_by_id
|
|
|
|
id = setinfo.get(i, {}).get("enchanting", 0)
|
|
self.部位附魔[i] = get_encfunc_by_id(id)
|
|
|
|
def 技能队列设置(self, setinfo):
|
|
self.技能队列 = []
|
|
for item in setinfo:
|
|
self.技能队列.append(
|
|
{
|
|
"名称": item["name"],
|
|
"无色消耗": self.get_skill_by_name(item["name"]).无色消耗,
|
|
"倍率": 1.0,
|
|
"等级变化": 0,
|
|
"CDR": 1.0,
|
|
"恢复": 0,
|
|
"形态": item.get("mode", ""),
|
|
}
|
|
)
|
|
|
|
def __药剂设置(self, setinfo):
|
|
self.药剂 = setinfo
|
|
|
|
def __怪物信息设置(self, id):
|
|
from core.basic.monster import get_monster_data
|
|
|
|
data = get_monster_data(str(id))
|
|
self.防御输入 = data["防御"]
|
|
self.火抗输入 = data["火抗"]
|
|
self.冰抗输入 = data["冰抗"]
|
|
self.光抗输入 = data["光抗"]
|
|
self.暗抗输入 = data["暗抗"]
|
|
pass
|
|
|
|
def __场景设置(self, id):
|
|
from core.basic.monster import get_scene_data
|
|
|
|
data = get_scene_data(str(id))
|
|
self.系统奶系数 = data["系统奶系数"]
|
|
self.系统奶基数 = data["系统奶基数"]
|
|
self.防御系数 = data["防御系数"]
|
|
pass
|
|
|
|
# 设置技能相关参数
|
|
def __skill_set(self, setinfo):
|
|
for i in setinfo:
|
|
k = self.get_skill_by_name(i["name"])
|
|
k.等级 = i["level"]
|
|
k.TP等级 = i["tp"]
|
|
k.手搓 = i["direct"]
|
|
k.手搓指令数 = i["directNumber"]
|
|
k.count = i["count"]
|
|
|
|
# 设置装备选项参数
|
|
def __equ_chose_set(self, setinfo):
|
|
get_equ(self.equVersion).set_func_chose(setinfo)
|
|
# for i in setinfo:
|
|
# equ.set_func_chose({i['id']: i['select']})
|
|
|
|
def hotkey_set(self, setinfo):
|
|
self.hotkey = setinfo
|
|
|
|
def __set_char(self, info):
|
|
self.类型 = info["carry_type"] if self.类型 != "辅助" else self.类型
|
|
try:
|
|
self.buff = info["buff_ratio"] / 100 + 1
|
|
except Exception:
|
|
raise ResponseException("请在技能页设置buff倍率")
|
|
self.护石栏 = info["talisman_set"]
|
|
self.符文 = info["rune_set"]
|
|
|
|
pass
|
|
|
|
# 设置穿戴的装备
|
|
|
|
def __穿戴装备(self, idlist):
|
|
self.装备栏 = []
|
|
self.部位装备 = {}
|
|
idlist = sorted(idlist)
|
|
for i in idlist:
|
|
装备 = get_equ(self.equVersion).get_equ_by_id(i)
|
|
self.部位装备.update({装备.部位: i})
|
|
for k in self.部位装备.keys():
|
|
self.装备栏.append(self.部位装备[k])
|
|
|
|
def __穿戴装扮(self, info):
|
|
self.装扮栏 = {}
|
|
self.装扮选项 = {}
|
|
for i in info:
|
|
self.装扮栏[i] = info[i].get("id", 0)
|
|
self.装扮选项[i] = info[i].get("option", 0)
|
|
# print(len(self.装扮栏))
|
|
|
|
# region 伤害计算相关函数
|
|
def __计算前预处理(self):
|
|
# 防止中途变更影响其他计算
|
|
self.__equ_chose_set(self.trigger_set)
|
|
self.设置觉醒技能()
|
|
self.职业特殊设置()
|
|
self.__辟邪玉计算()
|
|
self.护石计算()
|
|
self.符文计算()
|
|
self.装备属性计算()
|
|
self.skills_passive = {}
|
|
for i in self.技能栏:
|
|
self.skills_passive[i.名称] = {"info": [], "lv": i.等级}
|
|
self.职业特殊计算()
|
|
if self.类型 != "辅助":
|
|
self.CD倍率计算()
|
|
self.加算冷却计算()
|
|
self.被动倍率计算()
|
|
self.伤害指数计算()
|
|
|
|
def 适用数值计算(self):
|
|
进图智力 = 0
|
|
进图体力 = 0
|
|
进图精神 = 0
|
|
for skill in self.技能栏:
|
|
if skill.是否启用:
|
|
结算 = skill.结算统计(self)
|
|
if skill.站街生效:
|
|
self.__智力 += 结算[2]
|
|
self.__体力 += 结算[3]
|
|
self.__精神 += 结算[4]
|
|
else:
|
|
进图智力 += 结算[2]
|
|
进图体力 += 结算[3]
|
|
进图精神 += 结算[4]
|
|
|
|
进图 = 0
|
|
BUFF补正 = 0
|
|
|
|
if self.适用属性 == "体力":
|
|
进图 = self.__体力 + 进图体力
|
|
BUFF补正 = self.__BUFF补正体力
|
|
elif self.适用属性 == "精神":
|
|
进图 = self.__精神 + 进图精神
|
|
BUFF补正 = self.__BUFF补正精神
|
|
else:
|
|
进图 = self.__智力 + 进图智力
|
|
BUFF补正 = self.__BUFF补正智力
|
|
|
|
awake = self.get_skill_by_name("一次觉醒")
|
|
buff = self.get_skill_by_name("BUFF")
|
|
|
|
awake.适用数值 = 进图
|
|
awake.一觉力智 = self.__觉醒固定力智
|
|
awake.一觉力智per = self.__觉醒百分比力智
|
|
awake.一觉力智perTotal = self.__觉醒百分比力智Total
|
|
|
|
buff.适用数值 = 进图 + BUFF补正
|
|
buff.BUFF力智per = self.__buff百分比力智
|
|
buff.BUFF力智 = self.__buff固定力智
|
|
buff.BUFF三攻per = self.__buff百分比三攻
|
|
buff.BUFF三攻 = self.__buff固定三攻
|
|
|
|
self.适用数值 = 进图
|
|
# print('copaosee:', self.适用数值, [
|
|
# self.__智力, self.__体力, self.__精神], 进图, BUFF补正)
|
|
|
|
def 站街系数(self):
|
|
if self.适用属性 == "体力":
|
|
return self.__体力
|
|
elif self.适用属性 == "精神":
|
|
return self.__精神
|
|
return self.__智力
|
|
|
|
def 提升率计算(self, 总数据):
|
|
力智合计 = 0
|
|
三攻合计 = 0
|
|
|
|
for i in 总数据:
|
|
力智合计 += i[0]
|
|
三攻合计 += i[1]
|
|
|
|
x1 = (
|
|
(
|
|
self.辅助对象力智
|
|
+ (self.辅助对象力智 - 950) * self.系统奶系数
|
|
+ self.系统奶基数
|
|
)
|
|
/ 250
|
|
+ 1
|
|
) * self.辅助对象三攻
|
|
|
|
x2 = (
|
|
(
|
|
self.辅助对象力智
|
|
+ (self.辅助对象力智 - 950) * self.系统奶系数
|
|
+ self.系统奶基数
|
|
+ 力智合计
|
|
)
|
|
/ 250
|
|
+ 1
|
|
) * (self.辅助对象三攻 + 三攻合计)
|
|
return [
|
|
x2 / x1 * 100 * self.被动增伤倍率,
|
|
int(self.站街系数()),
|
|
力智合计,
|
|
三攻合计,
|
|
]
|
|
|
|
def BUFF量(self):
|
|
return self.__buff量 * (1 + self.__百分比buff量)
|
|
|
|
def 辅助计算(self):
|
|
self.适用数值计算()
|
|
data = {}
|
|
data["无色消耗"] = 0
|
|
|
|
skills = {}
|
|
|
|
values = []
|
|
|
|
CDR = []
|
|
|
|
for i in self.技能栏:
|
|
rs = i.结算统计(self)[:2]
|
|
cd = "-" if not i.是否主动 else i.等效CD()
|
|
cd_p = "-" if not i.是否主动 else round(100 - i.等效CD() / i.CD * 100, 2)
|
|
k = {}
|
|
k["name"] = i.名称
|
|
k["data"] = rs
|
|
if hasattr(i, "适用数值"):
|
|
k["apply_status"] = i.适用数值
|
|
if sum(rs) > 0 or cd != "-":
|
|
values.append(rs)
|
|
skills[i.名称] = {
|
|
"name": i.名称,
|
|
"level": i.等级,
|
|
"data": rs,
|
|
"cd": cd,
|
|
"cd_p": cd_p,
|
|
}
|
|
if i.是否主动:
|
|
CDR.append(
|
|
(i.名称,cd_p/100,cd)
|
|
)
|
|
pass
|
|
结果 = self.提升率计算(values)
|
|
|
|
data["total_data"] = 结果[0]
|
|
data["buffer_addition"] = 结果
|
|
data["skills"] = skills
|
|
data["CDR"] = CDR
|
|
|
|
return data
|
|
|
|
def 结果计算(self):
|
|
if self.类型 == "辅助":
|
|
return self.辅助计算()
|
|
else:
|
|
return self.伤害计算()
|
|
|
|
def 职业特殊计算(self):
|
|
pass
|
|
|
|
def 伤害计算技能特殊处理(self, skill: 技能):
|
|
pass
|
|
|
|
def 异常系数计算(self, item, skill):
|
|
cur = item
|
|
pa = ""
|
|
if item == "中毒":
|
|
pa = "zd_rate"
|
|
if item == "出血":
|
|
pa = "cx_rate"
|
|
if item == "感电":
|
|
pa = "gd_rate"
|
|
if item == "灼伤":
|
|
pa = "zs_rate"
|
|
if (
|
|
item == "灼伤"
|
|
and "灼伤" in get_global_data("state_type", self.equVersion)
|
|
and (
|
|
"冰冻" in get_global_data("get_state_type", self.equVersion)
|
|
or (
|
|
"冰冻" in get_global_data("state_type", self.equVersion)
|
|
and self.check_equ_by_name("永眠前的准备")
|
|
)
|
|
)
|
|
):
|
|
pa = "zs_bd_rate"
|
|
cur = "灼伤破冰"
|
|
保有率 = 0
|
|
异常基础加成 = 1.0
|
|
异常结算加成 = 1.0
|
|
装备加成异常结算 = 1.0
|
|
if pa == "zs_bd_rate":
|
|
保有率 = self.异常保有率计算(pa, cur)
|
|
异常基础加成 = 1.0
|
|
异常结算加成 = self.异常基础加成["灼伤破冰"]
|
|
装备加成异常结算 = self.异常结算加成.get(cur, 1.0)
|
|
else:
|
|
保有率 = self.异常保有率计算(pa, cur)
|
|
# 叠层处理
|
|
异常基础加成 = 1 + (self.异常基础加成.get(cur, 1.0) - 1) * get_global_data(
|
|
pa, self.equVersion, 1.0
|
|
)
|
|
异常结算加成 = 1.0
|
|
装备加成异常结算 = self.异常结算加成.get(cur, 1.0)
|
|
系数 = self.伤害系数.get(item, 0.0) * (
|
|
(1 - 保有率) * 异常基础加成
|
|
+ 保有率 * 异常基础加成 * 异常结算加成 * 装备加成异常结算
|
|
)
|
|
return 系数
|
|
pass
|
|
|
|
def 伤害计算(self):
|
|
data = {}
|
|
total_data = 0
|
|
|
|
skill_dict = {}
|
|
# 无色消耗 = 0
|
|
CDR = []
|
|
|
|
for i in self.技能队列:
|
|
k = self.get_skill_by_name(i["名称"])
|
|
if k.是否有伤害 == 1:
|
|
temp = skill_dict.get(k.名称, {})
|
|
self.伤害计算技能特殊处理(k)
|
|
if k.名称 not in data.keys():
|
|
temp["rate"] = k.被动倍率
|
|
if temp.get("cd", 0) > 0:
|
|
temp["cd"] = (
|
|
k.等效CD(
|
|
武器类型=self.武器类型,
|
|
输出类型=self.类型,
|
|
额外CDR=i["CDR"],
|
|
额外恢复=i["恢复"],
|
|
形态=i["形态"],
|
|
char=self
|
|
)
|
|
+ temp["cd"] * temp["count"]
|
|
) / (temp["count"] + 1)
|
|
else:
|
|
temp["cd"] = k.等效CD(
|
|
武器类型=self.武器类型,
|
|
输出类型=self.类型,
|
|
额外CDR=i["CDR"],
|
|
额外恢复=i["恢复"],
|
|
形态=i["形态"],
|
|
char=self
|
|
)
|
|
temp["mp"] = k.MP消耗(
|
|
武器类型=self.武器类型,
|
|
输出类型=self.类型,
|
|
额外倍率=self.__MP消耗量,
|
|
char=self,
|
|
)
|
|
temp["atk_rate"] = k.等效百分比(
|
|
武器类型=self.武器类型, 形态=i["形态"], char=self
|
|
)
|
|
temp["cosume_cube_frag"] = k.无色消耗
|
|
temp["level"] = k.等级
|
|
temp["cd_o"] = k.CD[k.等级] if isinstance(k.CD, list) else k.CD
|
|
temp["cd_unsave"] = (
|
|
(k.恢复 + i["恢复"])
|
|
if temp.get("cd_unsave", 1) == 1
|
|
else (temp.get("cd_unsave", 1) + k.恢复 + i["恢复"]) / 2
|
|
)
|
|
直伤 = k.等效百分比(
|
|
武器类型=self.武器类型,
|
|
额外等级=i["等级变化"],
|
|
额外倍率=i["倍率"],
|
|
伤害类型="直伤",
|
|
形态=i["形态"],
|
|
char=self,
|
|
)
|
|
|
|
# 直伤处理:直伤伤害*比例*系数
|
|
damage = (
|
|
直伤
|
|
* self.伤害指数
|
|
* k.被动倍率
|
|
* (self.伤害比例.get("直伤", 0.0))
|
|
/ 100
|
|
)
|
|
for item in ["中毒", "灼伤", "感电", "出血"]:
|
|
系数 = self.异常系数计算(item, k)
|
|
# 直伤转换的异常处理:直伤伤害*异常比例*异常系数
|
|
damage += (
|
|
直伤
|
|
* self.伤害指数
|
|
* k.被动倍率
|
|
* (self.伤害比例.get(item, 0.0) * 系数)
|
|
/ 100
|
|
)
|
|
# 异常伤害处理:异常伤害*异常系数
|
|
damage += (
|
|
k.等效百分比(
|
|
武器类型=self.武器类型,
|
|
额外等级=i["等级变化"],
|
|
额外倍率=i["倍率"],
|
|
伤害类型=item,
|
|
形态=i["形态"],
|
|
char=self,
|
|
)
|
|
* self.伤害指数
|
|
* k.被动倍率
|
|
* 系数
|
|
/ 100
|
|
)
|
|
total_data += damage
|
|
temp["name"] = k.名称
|
|
temp["damage"] = temp.get("damage", 0) + round(damage,0)
|
|
temp["count"] = temp.get("count", 0) + 1
|
|
skill_dict[k.名称] = temp
|
|
# if k.名称 not in ['爆裂弹', '杀意波动', '万毒噬心诀', '神罚之锤']:
|
|
# 无色消耗 += i['无色消耗']
|
|
# if k.CD > 1:
|
|
# CDR.append(
|
|
# (k.名称, round(1 - temp.get('cd', 0)/temp.get('cd_o', 0), 4)))
|
|
data["skills_passive"] = {}
|
|
for i in self.技能栏:
|
|
if i.关联技能 != ["无"] or i.冷却关联技能 != ["无"]:
|
|
temp = {}
|
|
temp["lv"] = i.等级
|
|
temp["name"] = i.名称
|
|
data["skills_passive"][i.名称] = temp
|
|
if skill_dict.get(i.名称, None) is not None:
|
|
if (i.CD[k.等级] if isinstance(i.CD, list) else i.CD) > 1:
|
|
temp = skill_dict.get(i.名称, {})
|
|
if temp.get("cd_o", 0) == 0:
|
|
CDR.append((i.名称, 0, 0))
|
|
else:
|
|
CDR.append(
|
|
(
|
|
i.名称,
|
|
round(1 - temp.get("cd", 0) / temp.get("cd_o", 0), 4),
|
|
temp.get("cd", 0),
|
|
)
|
|
)
|
|
pass
|
|
data["skills"] = skill_dict
|
|
data["total_data"] = round(total_data,0)
|
|
# data['无色消耗'] = 无色消耗
|
|
data["CDR"] = CDR
|
|
dps = 0
|
|
for temp in data["skills"]:
|
|
skill = data["skills"][temp]
|
|
try:
|
|
dps += (
|
|
(skill["damage"] / skill["count"])
|
|
/ skill["cd"]
|
|
* skill["damage"]
|
|
/ total_data
|
|
)
|
|
except Exception:
|
|
pass
|
|
data["dps"] = dps
|
|
return data
|
|
|
|
def 装备属性计算(self):
|
|
self.套装统计()
|
|
self.装备基础()
|
|
self.__时装基础()
|
|
self.__附魔计算()
|
|
self.__杂项计算()
|
|
self.__徽章计算()
|
|
if self.类型 != "辅助":
|
|
self.药剂计算()
|
|
self.__装备词条计算()
|
|
|
|
def __时装基础(self):
|
|
时装品级列表 = {}
|
|
for 部位 in self.装扮栏:
|
|
id = int(self.装扮栏[部位])
|
|
时装 = 装扮集合[id]
|
|
时装.效果(角色=self, 选项=self.装扮选项[部位])
|
|
时装品级列表[时装.套装] = 时装品级列表.get(时装.套装, 0) + 1
|
|
|
|
套装集合: List[装扮套装] = []
|
|
|
|
for 套装 in 装扮套装集合:
|
|
数量 = 时装品级列表.get(套装.名称, 0)
|
|
if 数量 > 0:
|
|
if 数量 >= 套装.所需数量:
|
|
查找 = len(
|
|
[
|
|
i
|
|
for i in 套装集合
|
|
if hasattr(i, "兼容于")
|
|
and i.兼容于 == 套装.名称
|
|
and i.所需数量 == 套装.所需数量
|
|
]
|
|
)
|
|
if 查找 == 0:
|
|
套装集合.append(套装)
|
|
else:
|
|
if hasattr(套装, "兼容于") and 套装.兼容于 is not None:
|
|
数量 += 时装品级列表.get(套装.兼容于, 0)
|
|
时装品级列表[套装.兼容于] = 数量
|
|
时装品级列表.pop(套装.名称)
|
|
for 套装 in 套装集合:
|
|
套装.效果(self)
|
|
|
|
pass
|
|
|
|
def __辟邪玉计算(self):
|
|
if "jade" not in self.打造详情.keys():
|
|
return
|
|
setinfo = self.打造详情["jade"]
|
|
info = {}
|
|
for i in ["jade_First", "jade_Second", "jade_Third", "jade_Fourth"]:
|
|
if i + "_type" in setinfo.keys():
|
|
try:
|
|
id = setinfo[i + "_type"]
|
|
value = float(setinfo[i + "_value"])
|
|
except Exception:
|
|
id = 0
|
|
value = 0
|
|
info[str(id)] = info.get(str(id), 0) + value
|
|
from core.equipment.jade import get_jadefunc_by_id
|
|
|
|
for id in info.keys():
|
|
func = get_jadefunc_by_id(int(id))
|
|
func(self, value=info.get(str(id), 0))
|
|
# 打印相关函数和效果
|
|
|
|
def 护石计算(self):
|
|
for item in self.护石栏:
|
|
try:
|
|
if item is not None and item != "" and item != "无":
|
|
self.get_skill_by_name(item).装备护石(char=self)
|
|
except Exception:
|
|
pass
|
|
|
|
def 符文计算(self):
|
|
for item in self.符文:
|
|
if item is not None and item != "":
|
|
skill_name: str = item[0:-1]
|
|
type = item[-1]
|
|
skill = self.get_skill_by_name(skill_name)
|
|
|
|
if skill is not None and skill.名称 == skill_name:
|
|
# 紫
|
|
if type == "1":
|
|
skill.倍率 *= 1.04
|
|
# 红
|
|
if type == "2":
|
|
skill.倍率 *= 1.06
|
|
skill.CDR *= 1.04
|
|
# 绿
|
|
if type == "3":
|
|
skill.倍率 *= 0.96
|
|
skill.CDR *= 0.93
|
|
# 蓝
|
|
if type == "4":
|
|
skill.CDR *= 0.95
|
|
else:
|
|
print(f"skill not found {skill_name}")
|
|
pass
|
|
|
|
def __杂项计算(self, mode=0):
|
|
if "others" not in self.打造详情.keys():
|
|
return
|
|
setinfo = self.打造详情["others"]
|
|
# 收集箱
|
|
try:
|
|
from core.equipment.sundry import get_sundriesfunc_by_id
|
|
|
|
func = get_sundriesfunc_by_id(setinfo["SJX_TYPE"])
|
|
# print(func)
|
|
func(self, 0, False, setinfo["SJX_XY"], setinfo["SJX_SQ"])
|
|
except Exception:
|
|
pass
|
|
# 勋章
|
|
try:
|
|
from core.equipment.sundry import get_sundriesfunc_by_id
|
|
|
|
func = get_sundriesfunc_by_id(setinfo["XZ_TYPE"])
|
|
func(
|
|
self,
|
|
0,
|
|
False,
|
|
setinfo.get("XZ_SHZ", 0),
|
|
setinfo.get("XZ_QH", 0),
|
|
setinfo.get("XZ_GS", 0),
|
|
)
|
|
except Exception:
|
|
pass
|
|
# 勋章 - New
|
|
# 老徽章选择为无 才生效
|
|
if int(setinfo.get("XZ_TYPE", 0)) == 0:
|
|
try:
|
|
from core.equipment.sundry import get_sundriesfunc_by_id
|
|
|
|
func = get_sundriesfunc_by_id(27063)
|
|
func(
|
|
self,
|
|
0,
|
|
False,
|
|
setinfo.get("medal_quality", 0),
|
|
setinfo.get("medal_lv", 0),
|
|
[
|
|
setinfo.get("medal_gems_1", 0),
|
|
setinfo.get("medal_gems_2", 0),
|
|
setinfo.get("medal_gems_3", 0),
|
|
setinfo.get("medal_gems_4", 0),
|
|
],
|
|
0.1,
|
|
)
|
|
pass
|
|
except Exception:
|
|
pass
|
|
for i in setinfo.keys():
|
|
if i.startswith("SJX") or i.startswith("XZ"):
|
|
pass
|
|
else:
|
|
try:
|
|
id = setinfo[i]
|
|
from core.equipment.sundry import get_sundriesfunc_by_id
|
|
|
|
func = get_sundriesfunc_by_id(id)
|
|
# 站街
|
|
func(self)
|
|
# 进图
|
|
func(self, mode=1)
|
|
except Exception:
|
|
pass
|
|
|
|
def __徽章计算(self):
|
|
idlist = []
|
|
for i in 部位列表 + (
|
|
"皮肤",
|
|
"光环",
|
|
"武器装扮",
|
|
): # ('皮肤', '光环', '武器装扮', )
|
|
if i in self.打造详情.keys() and self.部位是否穿戴(i):
|
|
temp = self.打造详情[i]
|
|
for j in ["socket_left", "socket_right"]:
|
|
id = temp.get(j, 0)
|
|
if id == 0:
|
|
pass
|
|
elif str(id).isdigit():
|
|
idlist.append(id)
|
|
else:
|
|
# 白金技能等级加成处理 id:技能名称
|
|
self.单技能加成(名称=id, lv=1)
|
|
self.基础属性加成(四维=8)
|
|
pass
|
|
for i in idlist:
|
|
from core.equipment.emblems import get_embfunc_by_id
|
|
|
|
func = get_embfunc_by_id(i)
|
|
func(self)
|
|
# 打印相关函数和效果
|
|
# print('{}: {}'.format(func, func(self, text=TRUE)))
|
|
|
|
def __附魔计算(self):
|
|
for i in self.部位附魔.keys():
|
|
if self.部位是否穿戴(i):
|
|
func = self.部位附魔[i]
|
|
func(self, part=i)
|
|
func(self, mode=1, part=i)
|
|
# 打印相关函数和效果
|
|
# print('{}: {}: {}'.format(i, func, func(self, text=TRUE)))
|
|
|
|
def 装备基础(self):
|
|
# 移除不符合版本的装备,不参与后续计算
|
|
self.装备栏 = list(
|
|
filter(
|
|
lambda x: get_equ(self.equVersion).get_equ_by_id(x).名称 != "",
|
|
self.装备栏,
|
|
)
|
|
)
|
|
for id in self.装备栏:
|
|
temp = get_equ(self.equVersion).get_equ_by_id(id)
|
|
temp = get_equ(self.equVersion).get_equ_by_id(
|
|
id, self.打造详情.get(temp.部位, {}).get("growth_sj", 0) > 0
|
|
)
|
|
if "甲" in temp.类型:
|
|
self.__防具计算(temp)
|
|
elif temp.类型 == "首饰":
|
|
self.__首饰计算(temp)
|
|
elif temp.类型 == "特殊装备":
|
|
self.__特殊装备计算(temp)
|
|
elif temp.部位 == "武器":
|
|
self.武器计算(temp)
|
|
elif temp.部位 in ["称号", "宠物"]:
|
|
self.__称号宠物计算(temp)
|
|
if temp.部位 not in ["称号", "宠物"]:
|
|
self.__增幅计算(temp)
|
|
pass
|
|
|
|
# if temp.所属套装 != '智慧产物':
|
|
# return 精通计算(temp.等级, temp.品质, self.打造详情.get(部位, {}).get('cursed_number', 0), 部位)
|
|
# else:
|
|
# return 精通计算(temp.等级, temp.品质, self.打造详情.get(部位, {}).get('wisdom_number', 0), 部位)
|
|
|
|
def __防具计算(self, temp: equipment) -> None:
|
|
self.基础属性加成(**temp.__dict__)
|
|
|
|
部位 = temp.部位
|
|
强化等级 = self.打造详情.get(部位, {}).get("cursed_number", 0)
|
|
|
|
力量 = 智力 = 体力 = 精神 = 0
|
|
|
|
if self.类型 == "辅助":
|
|
if "智力" in self.防具精通属性:
|
|
智力 += 辅助精通计算(
|
|
110 if temp.神 else temp.等级, temp.品质, 强化等级, 部位, "智力"
|
|
)
|
|
if "精神" in self.防具精通属性:
|
|
精神 += 辅助精通计算(
|
|
110 if temp.神 else temp.等级, temp.品质, 强化等级, 部位, "精神"
|
|
)
|
|
if "体力" in self.防具精通属性:
|
|
体力 += 辅助精通计算(
|
|
110 if temp.神 else temp.等级, temp.品质, 强化等级, 部位, "体力"
|
|
)
|
|
else:
|
|
精通数值 = 精通计算(
|
|
110 if temp.神 else temp.等级, temp.品质, 强化等级, 部位, self.防具类型
|
|
)
|
|
if "力量" in self.防具精通属性:
|
|
力量 += 精通数值
|
|
if "智力" in self.防具精通属性:
|
|
智力 += 精通数值
|
|
|
|
# if temp.等级 == 105:
|
|
# if self.类型 == '辅助':
|
|
# self.技能等级加成('主动', 30, 30, 1)
|
|
# self.技能等级加成('主动', 50, 50, 1)
|
|
self.基础属性加成(力量=力量, 智力=智力, 体力=体力, 精神=精神)
|
|
|
|
def __增幅计算(self, temp: equipment) -> None:
|
|
if self.打造详情.get(temp.部位, {}).get("cursed_type", 1) == 1:
|
|
x = 增幅计算(
|
|
min(temp.等级, MAXEQULV),
|
|
temp.品质,
|
|
self.打造详情.get(temp.部位, {}).get("cursed_number", 0),
|
|
)
|
|
if self.类型 == "物理百分比" or self.类型 == "物理固伤":
|
|
self.基础属性加成(力量=x)
|
|
self.打造[temp.部位]["增幅四维"][0] = x
|
|
elif self.类型 == "魔法百分比" or self.类型 == "魔法固伤":
|
|
self.基础属性加成(智力=x)
|
|
self.打造[temp.部位]["增幅四维"][1] = x
|
|
elif self.类型 == "辅助":
|
|
if self.适用属性 == "体力":
|
|
self.基础属性加成(体力=x)
|
|
self.打造[temp.部位]["增幅四维"][2] = x
|
|
elif self.适用属性 == "精神":
|
|
self.基础属性加成(精神=x)
|
|
self.打造[temp.部位]["增幅四维"][3] = x
|
|
else:
|
|
self.基础属性加成(智力=x)
|
|
self.打造[temp.部位]["增幅四维"][1] = x
|
|
# if self.是否增幅[i] and temp.所属套装 != '智慧产物':
|
|
# x = 增幅计算(temp.等级, temp.品质, self.强化等级[i])
|
|
|
|
def __称号宠物计算(self, temp: equipment) -> None:
|
|
self.基础属性加成(**temp.__dict__)
|
|
|
|
def __首饰计算(self, temp: equipment) -> None:
|
|
self.基础属性加成(**temp.__dict__)
|
|
# if temp.等级 == 105 and self.类型 == '辅助':
|
|
# self.技能等级加成('主动', 30, 30, 1)
|
|
# self.技能等级加成('主动', 50, 50, 1)
|
|
|
|
def __特殊装备计算(self, temp: equipment) -> None:
|
|
self.基础属性加成(**temp.__dict__)
|
|
# if temp.等级 == 105 and self.类型 == '辅助':
|
|
# self.技能等级加成('主动', 30, 30, 1)
|
|
# self.技能等级加成('主动', 50, 50, 1)
|
|
# if temp.品质 == '史诗' and temp.部位 == '魔法石':
|
|
# self.技能等级加成('主动', 50, 50, 1)
|
|
# 耳环
|
|
if temp.部位 == "耳环":
|
|
# if temp.所属套装 != '智慧产物':
|
|
x = 耳环计算(
|
|
min(temp.等级, MAXEQULV),
|
|
temp.品质,
|
|
self.打造详情.get(temp.部位, {}).get("cursed_number", 0),
|
|
)
|
|
self.打造["耳环"]["强化攻击力"] = [x] * 3
|
|
self.基础属性加成(三攻=x)
|
|
# 辅助装备、魔法石
|
|
else:
|
|
# if temp.所属套装 != '智慧产物':
|
|
x = 左右计算(
|
|
min(temp.等级, MAXEQULV),
|
|
temp.品质,
|
|
self.打造详情.get(temp.部位, {}).get("cursed_number", 0),
|
|
)
|
|
if self.类型 == "辅助":
|
|
self.打造[temp.部位]["强化四维"] = [x] * 4
|
|
else:
|
|
self.打造[temp.部位]["强化四维"] = [x] * 2
|
|
self.基础属性加成(四维=x)
|
|
|
|
def 武器计算(self, temp: equipment) -> None:
|
|
self.基础属性加成(**temp.__dict__)
|
|
self.武器类型 = temp.类型
|
|
# if temp.等级 == 105 and self.类型 == '辅助':
|
|
# self.技能等级加成('主动', 30, 30, 3)
|
|
# self.技能等级加成('主动', 50, 50, 4)
|
|
# if temp.品质 == '史诗':
|
|
# self.技能等级加成('主动', 50, 50, 1)
|
|
# if temp.所属套装 != '智慧产物':
|
|
info = self.打造详情.get(temp.部位, {})
|
|
# 暂时没有用110计算强化增幅的
|
|
物理攻击力 = 武器强化计算(
|
|
min(temp.等级, MAXEQULV),
|
|
temp.品质,
|
|
info.get("cursed_number", 0),
|
|
temp.类型,
|
|
"物理",
|
|
)
|
|
魔法攻击力 = 武器强化计算(
|
|
min(temp.等级, MAXEQULV),
|
|
temp.品质,
|
|
info.get("cursed_number", 0),
|
|
temp.类型,
|
|
"魔法",
|
|
)
|
|
独立攻击力 = 锻造计算(
|
|
min(temp.等级, MAXEQULV), temp.品质, info.get("dz_number", 0)
|
|
)
|
|
|
|
self.打造["武器"]["强化攻击力"] = [物理攻击力, 魔法攻击力, 0]
|
|
|
|
self.打造["武器"]["锻造加成"][0] = 独立攻击力
|
|
|
|
四维 = 0
|
|
if self.类型 == "辅助":
|
|
四维 = 锻造四维(min(temp.等级, MAXEQULV), temp.品质, info.get("dz_number", 0))
|
|
self.打造["武器"]["锻造加成"][1] = 四维
|
|
|
|
self.基础属性加成(
|
|
物理攻击力=物理攻击力,
|
|
魔法攻击力=魔法攻击力,
|
|
独立攻击力=独立攻击力,
|
|
四维=四维,
|
|
)
|
|
|
|
def 职业装备特殊计算(self) -> None:
|
|
pass
|
|
|
|
def 药剂计算(self, rate=1.0) -> None:
|
|
from core.equipment.consumable import get_sundriesfunc_by_id
|
|
|
|
for item in self.药剂:
|
|
func = get_sundriesfunc_by_id(item)
|
|
func(self, rate=rate, mode=0)
|
|
func(self, rate=rate, mode=1)
|
|
|
|
def 是否升级110(self, part):
|
|
return self.词条等级[part][0] > 80
|
|
|
|
def 兼容数量统计(self, suit):
|
|
equs = get_equ(self.equVersion)
|
|
count = 0
|
|
for i in 部位列表:
|
|
equ = equs.get_equ_by_id(self.部位装备.get(i, 0))
|
|
if len(equ.suits) < 2:
|
|
continue
|
|
if suit in equ.suits:
|
|
count += 1
|
|
return count
|
|
|
|
def 套装统计(self):
|
|
suit = []
|
|
self.suits = []
|
|
equs = get_equ(self.equVersion)
|
|
for i in 部位列表:
|
|
equ = equs.get_equ_by_id(self.部位装备.get(i, 0))
|
|
if len(equ.suits) < 0:
|
|
continue
|
|
# 星辰百变
|
|
if len(equ.可选属性) > 0:
|
|
if self.打造详情.get(i, {}).get("changeable", True):
|
|
suit += equ.suits
|
|
else:
|
|
suit += equ.suits
|
|
for i in self.融合列表:
|
|
equ = equs.get_equ_by_id(i)
|
|
if len(equ.suits) < 0:
|
|
continue
|
|
suit += equ.suits
|
|
suit_count = {}
|
|
for i in set(suit):
|
|
suit_count[i] = suit.count(i)
|
|
suits = []
|
|
compatibility = []
|
|
for i in suit_count:
|
|
suitsInfo = list(
|
|
filter(
|
|
lambda x: x["suit_id"] == i and x["need_num"] <= suit_count[i],
|
|
equs.suit_info,
|
|
)
|
|
)
|
|
for j in suitsInfo:
|
|
suits.append(j["id"])
|
|
compatibility += j["compatibility"]
|
|
self.suits = list(set(suits) - set(compatibility))
|
|
self.suitInfo = []
|
|
for i in self.suits:
|
|
temp = list(filter(lambda x: x["id"] == i, equs.suit_info))[0]
|
|
self.suitInfo.append(f'{temp["name"]}[{temp["need_num"]}]')
|
|
pass
|
|
|
|
def __装备词条计算(self):
|
|
# 攻击强化相关计算
|
|
for i in 部位列表:
|
|
temp = []
|
|
equ = get_equ(self.equVersion).get_equ_by_id(self.部位装备.get(i, 0))
|
|
if equ.品质 == "传说":
|
|
# limit = 80
|
|
# limit = 70
|
|
# for j in [
|
|
# "growth_cs_first",
|
|
# "growth_cs_second",
|
|
# "growth_cs_third",
|
|
# "growth_cs_fourth",
|
|
# ]:
|
|
temp = [80] * 4
|
|
else:
|
|
temp = [140]*4
|
|
# limit = 80
|
|
# growth_sj = self.打造详情.get(i, {}).get("growth_sj", 0)
|
|
# if growth_sj > 0:
|
|
# temp = [80 + growth_sj] * 4
|
|
# else:
|
|
# for j in [
|
|
# "growth_first",
|
|
# "growth_second",
|
|
# "growth_third",
|
|
# "growth_fourth",
|
|
# ]:
|
|
# temp.append(min(limit, self.打造详情.get(i, {}).get(j, 1)))
|
|
# 锁定等级 常规武器升级锁神40 传说武器锁定70
|
|
for name in ["霜", "雨", "雷", "风", "焰", "失衡"]:
|
|
if equ.名称.startswith(f"{name} :"):
|
|
temp = [120] * 4
|
|
if equ.名称.startswith("跨越之忆"):
|
|
temp = [70] * 4
|
|
# limit = 70 if get_equ(self.equVersion).get_equ_by_id(
|
|
# self.部位装备.get(i, 0)).品质 == "传说" else 80
|
|
# for j in ["growth_first", "growth_second", "growth_third", "growth_fourth"]:
|
|
# temp.append(min(limit, self.打造详情.get(i, {}).get(j, 1)))
|
|
self.词条等级[i] = temp
|
|
|
|
asrahan = False
|
|
weapon = (
|
|
get_equ(self.equVersion).get_equ_by_id(self.部位装备.get("武器", 0)).名称
|
|
)
|
|
for index, name in enumerate(["雷", "风", "霜", "焰", "雨", "失衡"]):
|
|
if weapon.startswith(f"{name} :") and self.asrahan.get("type", 0) == index:
|
|
asrahan = True
|
|
if weapon.startswith("跨越之忆") and self.asrahan.get("type", 0) in [0, 1, 2, 3, 4]:
|
|
asrahan = True
|
|
if asrahan:
|
|
get_equ(self.equVersion).get_asrahan()(
|
|
self,
|
|
self.asrahan.get("type", 0),
|
|
self.asrahan.get("lv", 0),
|
|
self.asrahan.get("additional", 0),
|
|
)
|
|
武器融合词条 = self.武器融合.get(str(self.部位装备.get("武器", 0)), [])
|
|
成长词条组合 = get_equ(self.equVersion).get_damagelist_by_idlist(
|
|
self.装备栏, self.自定义词条, self.融合列表, 武器融合词条
|
|
)
|
|
|
|
temp_params = {}
|
|
for 部位, 序号, atk, buff, params, _type, index in 成长词条组合:
|
|
if _type > 0:
|
|
等级 = self.词条等级[部位][序号]
|
|
else:
|
|
# 贴膜/融合
|
|
等级 = 1
|
|
attack = 成长词条计算(atk, 等级, self.equVersion)
|
|
if (
|
|
get_equ(self.equVersion).get_equ_by_id(self.部位装备.get(部位, 0)).品质
|
|
== "传说"
|
|
and 等级 > 60
|
|
):
|
|
attack += 10 * (等级 - 60) / 4
|
|
buffer = 成长词条计算(buff, 等级, self.equVersion)
|
|
self.攻击强化加成(attack)
|
|
self.辅助属性加成(buff量=buffer)
|
|
# 装备打造
|
|
if _type > 0:
|
|
self.打造[部位]["attack"][序号] = attack
|
|
self.打造[部位]["buffer"][序号] = buffer
|
|
self.打造[部位]["params"][序号] = []
|
|
|
|
temp_params[部位] = temp_params.get(部位, {})
|
|
temp_params[部位][str(序号)] = temp_params[部位].get(str(序号), [])
|
|
|
|
params = [] if params is None else params
|
|
for param in params:
|
|
param = 成长词条计算(param, 等级, self.equVersion)
|
|
if _type > 0:
|
|
self.打造[部位]["params"][序号].append(param)
|
|
temp_params[部位][str(序号)].append(param)
|
|
|
|
# 词条效果相关计算
|
|
for func, 部位, 序号, index, _type, id, 融合石词条位置 in get_equ(
|
|
self.equVersion
|
|
).get_func_list_by_idlist(self):
|
|
if _type > 0:
|
|
等级 = self.词条等级[部位][序号]
|
|
# 特性
|
|
elif _type == -2:
|
|
等级 = self.特性等级.get(str(index), 0)
|
|
# 融合
|
|
elif _type == -3:
|
|
等级 = self.融合石等级.get(str(id),[0,0,0])[融合石词条位置]
|
|
else:
|
|
等级 = 1
|
|
params = temp_params.get(部位, {}).get(str(序号), [])
|
|
# print(部位, 序号, self.打造[部位]["params"][序号], index)
|
|
params = [] if params == [None] else params
|
|
# print(序号, params, index)
|
|
# print(序号, params, 部位)
|
|
res = func(self, mode=0, part=部位, lv=等级, params=params) # 进图效果
|
|
if res is not None:
|
|
# print(res, type(res))
|
|
if isinstance(res,list):
|
|
for i in res:
|
|
self.打造[部位]["tips"].append(i)
|
|
else:
|
|
self.打造[部位]["tips"].append(res)
|
|
if 部位 not in self.tip_part:
|
|
self.tip_part.append(部位)
|
|
|
|
for func, 部位, 序号, index, _type, id, 融合石词条位置 in get_equ(
|
|
self.equVersion
|
|
).get_func_list_by_idlist(self):
|
|
if _type > 0:
|
|
等级 = self.词条等级[部位][序号]
|
|
# 特性
|
|
elif _type == -2:
|
|
等级 = self.特性等级.get(str(index), 0)
|
|
# 融合
|
|
elif _type == -3:
|
|
等级 = self.融合石等级.get(str(id),[0,0,0])[融合石词条位置]
|
|
else:
|
|
等级 = 1
|
|
params = temp_params.get(部位, {}).get(str(序号), [])
|
|
# print(部位, 序号, self.打造[部位]["params"][序号], index)
|
|
params = [] if params == [None] else params
|
|
# print(序号, params, index)
|
|
# print(序号, params, 部位)
|
|
# func(self, part=部位, lv=等级, params=params) # 站街效果
|
|
res = func(self, mode=1, part=部位, lv=等级, params=params) # 进图效果
|
|
if res is not None:
|
|
# print(res, type(res))
|
|
if isinstance(res,list):
|
|
for i in res:
|
|
self.打造[部位]["tips"].append(i)
|
|
else:
|
|
self.打造[部位]["tips"].append(res)
|
|
if 部位 not in self.tip_part:
|
|
self.tip_part.append(部位)
|
|
# 打印相关函数和效果
|
|
# print('{}(lv.{}): {} {}'.format(部位, 等级, func, func(self, text=TRUE)))
|
|
|
|
def check_fun_by_id(self, id):
|
|
idList = get_equ(self.equVersion).get_func_list_by_idlist(self)
|
|
return id in [index for _, _, _, index, _,_,_ in idList]
|
|
|
|
def check_equ_by_name(self, name):
|
|
id = get_equ(self.equVersion).get_equ_by_name(name).id
|
|
return id > 0 and (id in self.装备栏 or id in self.融合列表)
|
|
|
|
def check_fusion_upgrade(self, part):
|
|
return self.打造详情.get(part, {}).get("fusion_upgrade", False)
|
|
|
|
def 被动倍率计算(self):
|
|
if self.__基础精通倍率 != 1:
|
|
基础精通 = self.get_skill_by_name("基础精通")
|
|
if 基础精通.名称 == "基础精通":
|
|
基础精通.倍率 *= self.__基础精通倍率
|
|
|
|
for i in self.技能栏:
|
|
i.被动倍率 = 1
|
|
for i in self.技能栏:
|
|
for index in range(0, 4):
|
|
index = "" if index == 0 else str(index)
|
|
关联技能 = getattr(i, "关联技能" + index, ["无"])
|
|
非关联技能 = getattr(i, "非关联技能" + index, ["无"])
|
|
try:
|
|
加成倍率 = eval("i.加成倍率" + index + "(self.武器类型)")
|
|
except Exception:
|
|
加成倍率 = 1.0
|
|
try:
|
|
# print(i.名称, 加成倍率, eval("i.加成描述"+index+"(self.武器类型)"))
|
|
if 加成倍率 != 1:
|
|
self.skills_passive[i.名称]["info"].append(
|
|
{
|
|
"type": "倍率",
|
|
"info": eval("i.加成描述" + index + "(self.武器类型)"),
|
|
}
|
|
)
|
|
except Exception:
|
|
pass
|
|
if 关联技能 != ["无"]:
|
|
if 关联技能 == ["所有"]:
|
|
for j in self.技能栏:
|
|
if j.是否有伤害 == 1:
|
|
j.被动倍率 *= 加成倍率
|
|
else:
|
|
# print(self.技能序号)
|
|
for k in 关联技能:
|
|
self.技能栏[self.技能序号[k]].被动倍率 *= 加成倍率
|
|
if 非关联技能 != ["无"]:
|
|
if 非关联技能 == ["所有"]:
|
|
for j in self.技能栏:
|
|
if j.是否有伤害 == 1:
|
|
j.被动倍率 /= 加成倍率
|
|
else:
|
|
for k in 非关联技能:
|
|
self.技能栏[self.技能序号[k]].被动倍率 /= 加成倍率
|
|
|
|
def 加算冷却计算(self):
|
|
for i in self.技能栏:
|
|
if i.是否有伤害 == 1:
|
|
i.CDR *= 1 - self.__加算冷却缩减
|
|
|
|
def CD倍率计算(self):
|
|
for i in self.技能栏:
|
|
for index in range(0, 4):
|
|
index = "" if index == 0 else str(index)
|
|
关联技能 = getattr(i, "冷却关联技能" + index, ["无"])
|
|
非关联技能 = getattr(i, "非冷却关联技能" + index, ["无"])
|
|
冷却类型 = getattr(i, "冷却类型" + index, 0)
|
|
try:
|
|
加成倍率 = eval("i.CD缩减倍率" + index + "(self.武器类型)")
|
|
except Exception:
|
|
加成倍率 = 1.0
|
|
try:
|
|
if 加成倍率 != 1:
|
|
self.skills_passive[i.名称]["info"].append(
|
|
{
|
|
"type": "CDR",
|
|
"info": eval(
|
|
"i.CD缩减描述" + index + "(self.武器类型)"
|
|
),
|
|
}
|
|
)
|
|
except Exception:
|
|
pass
|
|
if 关联技能 != ["无"]:
|
|
if 关联技能 == ["所有"]:
|
|
for j in self.技能栏:
|
|
if j.是否有伤害 == 1:
|
|
if 冷却类型 == 0:
|
|
j.CDR *= 加成倍率
|
|
if 冷却类型 == 1:
|
|
j.CDR_O *= 加成倍率
|
|
else:
|
|
for k in 关联技能:
|
|
if 冷却类型 == 0:
|
|
self.技能栏[self.技能序号[k]].CDR *= 加成倍率
|
|
if 冷却类型 == 1:
|
|
self.技能栏[self.技能序号[k]].CDR_O *= 加成倍率
|
|
if 非关联技能 != ["无"]:
|
|
if 非关联技能 == ["所有"]:
|
|
for j in self.技能栏:
|
|
if j.是否有伤害 == 1:
|
|
if 冷却类型 == 0:
|
|
j.CDR /= 加成倍率
|
|
if 冷却类型 == 1:
|
|
j.CDR_O /= 加成倍率
|
|
else:
|
|
for k in 非关联技能:
|
|
if 冷却类型 == 0:
|
|
self.技能栏[self.技能序号[k]].CDR /= 加成倍率
|
|
if 冷却类型 == 1:
|
|
self.技能栏[self.技能序号[k]].CDR_O /= 加成倍率
|
|
|
|
def __属性倍率计算(self):
|
|
# 火、冰、光、暗
|
|
self.属性倍率组 = []
|
|
self.属性倍率组.append(1.05 + 0.0045 * int(self.__火属性强化 - self.火抗输入))
|
|
self.属性倍率组.append(1.05 + 0.0045 * int(self.__冰属性强化 - self.冰抗输入))
|
|
self.属性倍率组.append(1.05 + 0.0045 * int(self.__光属性强化 - self.光抗输入))
|
|
self.属性倍率组.append(1.05 + 0.0045 * int(self.__暗属性强化 - self.暗抗输入))
|
|
self.属性倍率 = max(self.属性倍率组)
|
|
|
|
def __面板系数计算(self, mode=1):
|
|
if self.类型 is None or self.类型 == "":
|
|
self.类型 = self.输出类型选项[0]
|
|
# 基础面板 不含百分比力智和百分比三攻
|
|
if mode == 0:
|
|
if self.类型 == "物理百分比":
|
|
return int((self.基础面板力量() / 250 + 1) * self.基础面板物理攻击力())
|
|
elif self.类型 == "魔法百分比":
|
|
return int((self.基础面板智力() / 250 + 1) * self.基础面板魔法攻击力())
|
|
elif self.类型 == "物理固伤":
|
|
return int((self.基础面板力量() / 250 + 1) * self.基础面板独立攻击力())
|
|
elif self.类型 == "魔法固伤":
|
|
return int((self.基础面板智力() / 250 + 1) * self.基础面板独立攻击力())
|
|
# 旧版算法 不含斗神、宠物技能等
|
|
else:
|
|
if self.类型 == "物理百分比":
|
|
return int(
|
|
(self.面板力量() / 250 + 1)
|
|
* self.基础面板物理攻击力()
|
|
* (1 + self.__百分比三攻)
|
|
)
|
|
elif self.类型 == "魔法百分比":
|
|
return int(
|
|
(self.面板智力() / 250 + 1)
|
|
* self.基础面板魔法攻击力()
|
|
* (1 + self.__百分比三攻)
|
|
)
|
|
elif self.类型 == "物理固伤":
|
|
return int(
|
|
(self.面板力量() / 250 + 1)
|
|
* self.基础面板独立攻击力()
|
|
* (1 + self.__百分比三攻)
|
|
)
|
|
elif self.类型 == "魔法固伤":
|
|
return int(
|
|
(self.面板智力() / 250 + 1)
|
|
* self.基础面板独立攻击力()
|
|
* (1 + self.__百分比三攻)
|
|
)
|
|
|
|
def 伤害指数计算(self):
|
|
防御 = max(self.防御输入 * self.防御系数 - self.__固定减防, 0) * (
|
|
1 - self.__百分比减防
|
|
)
|
|
|
|
# 固定攻击方100级
|
|
基准倍率 = 1.5 * self.buff * (1 - 防御 / (防御 + 200 * 100))
|
|
|
|
self.__属性倍率计算()
|
|
|
|
# 基础面板 不含百分比力智和百分比三攻
|
|
基础面板 = self.__面板系数计算(mode=0)
|
|
旧版面板 = self.__面板系数计算(mode=1)
|
|
|
|
# 攻击强化显示改版
|
|
新 = self.__攻击强化 * (1 + self.__百分比攻击强化) * 0.01
|
|
# 攻击强化显示改版
|
|
|
|
旧 = (
|
|
1 + int((self.__伤害增加 + 0.00000001) * 100) / 100
|
|
) # 避免出现浮点数取整BUG
|
|
旧 *= 1 + self.__暴击伤害
|
|
旧 *= 1 + self.__最终伤害
|
|
旧 *= 1 + self.__持续伤害
|
|
旧 *= 1 + self.__附加伤害 + self.__属性附加 * self.属性倍率
|
|
|
|
self.伤害指数 = (
|
|
(新 * 基础面板 + 旧 * 旧版面板)
|
|
* self.技能攻击力
|
|
* self.属性倍率
|
|
* 基准倍率
|
|
* self.斗神宠物
|
|
* (
|
|
1.25
|
|
if "破招攻击" in get_global_data("attack_type", self.equVersion)
|
|
else 1.0
|
|
)
|
|
)
|
|
|
|
# 7.8日,伤害数据压缩
|
|
self.伤害指数 /= 1000
|
|
|
|
def 基础属性修正(self, info):
|
|
from core.util.toNum import str_to_num
|
|
|
|
self.攻击强化加成(str_to_num(info.get("攻击强化", 0)))
|
|
self.buff量加成(str_to_num(info.get("BUFF量", 0)))
|
|
self.百分比攻击强化加成(str_to_num(info.get("攻击强化百分比", 0)) / 100)
|
|
self.__百分比buff量 += str_to_num(info.get("BUFF量百分比", 0)) / 100
|
|
if self.类型 == "辅助":
|
|
self.基础属性加成(四维=str_to_num(info.get("四维", 0)))
|
|
else:
|
|
self.基础属性加成(
|
|
进图力量=str_to_num(info.get("四维", 0)),
|
|
进图智力=str_to_num(info.get("四维", 0)),
|
|
体精=str_to_num(info.get("四维", 0)),
|
|
三攻=str_to_num(info.get("三攻", 0)),
|
|
)
|
|
self.技能攻击力加成(str_to_num(info.get("技攻", 0)) / 100)
|
|
self.基础属性加成(
|
|
火属性抗性=str_to_num(info.get("火抗", 0)),
|
|
光属性抗性=str_to_num(info.get("光抗", 0)),
|
|
冰属性抗性=str_to_num(info.get("冰抗", 0)),
|
|
暗属性抗性=str_to_num(info.get("暗抗", 0)),
|
|
)
|
|
self.攻击速度增加(str_to_num(info.get("攻速", 0)) / 100)
|
|
self.火属性强化加成(str_to_num(info.get("火强", 0)))
|
|
self.光属性强化加成(str_to_num(info.get("光强", 0)))
|
|
self.冰属性强化加成(str_to_num(info.get("冰强", 0)))
|
|
self.暗属性强化加成(str_to_num(info.get("暗强", 0)))
|
|
for 抗性 in [
|
|
"出血",
|
|
"中毒",
|
|
"灼伤",
|
|
"感电",
|
|
"冰冻",
|
|
"减速",
|
|
"眩晕",
|
|
"诅咒",
|
|
"失明",
|
|
"石化",
|
|
"睡眠",
|
|
"混乱",
|
|
"束缚",
|
|
]:
|
|
self.异常抗性加成(抗性, str_to_num(info.get(抗性 + "抗性", 0)) / 100)
|
|
self.MP消耗量加成(str_to_num(info.get("MP消耗量", 0)) / 100)
|
|
self.set_eq_params(
|
|
"skill_range",
|
|
self.get_eq_params("skill_range")
|
|
+ str_to_num(info.get("技能范围Σ", 0)) / 100,
|
|
)
|
|
|
|
# endregion
|
|
|
|
def get_individuation(self, index):
|
|
if index >= len(self.individuation):
|
|
return 0
|
|
else:
|
|
return 0 if self.individuation[index] is None else self.individuation[index]
|
|
|
|
def calc_init(self, info, equipList: List[int] = []):
|
|
# 获取打造数据
|
|
self.__打造设置(info.get("forge_set", {}))
|
|
|
|
self.asrahan = info.get("asrahan", {})
|
|
# 设置职业信息
|
|
self.__set_char(info)
|
|
|
|
self.__怪物信息设置(info.get("monster", 2))
|
|
|
|
self.__场景设置(info.get("scene", 1))
|
|
|
|
# 自定义词条部分
|
|
self.自定义词条 = info.get("customize", {})
|
|
# 时装设置
|
|
self.__穿戴装扮(info.get("dress_set", {}))
|
|
# 获取装备列表
|
|
self.__穿戴装备(list(map(int, equipList)))
|
|
|
|
# 获取技能数据
|
|
self.__skill_set(info.get("skill_set", {}))
|
|
# 获取装备选项数据
|
|
self.trigger_set = info.get("trigger_set", {})
|
|
self.__equ_chose_set(self.trigger_set)
|
|
# 药剂设置
|
|
self.__药剂设置(info.get("consumable_list", []))
|
|
|
|
self.hotkey_set(info.get("hotkey_set", []))
|
|
|
|
self.融合列表 = list(map(int, info.get("fusion_list", [])))
|
|
|
|
self.武器融合 = info.get("merge", {})
|
|
|
|
self.特性列表 = [int(i) for i in list(info.get("specificity", {}).keys())]
|
|
|
|
self.特性等级 = info.get("specificity", {})
|
|
|
|
self.融合石等级 = info.get("stone_set", {})
|
|
|
|
self.技能队列设置(info.get("skill_que", []))
|
|
|
|
self.individuation = info.get("individuation", [])
|
|
self.基础属性修正(
|
|
info.get(
|
|
"corrections",
|
|
{
|
|
"BUFF量": 0,
|
|
"BUFF量百分比": 0,
|
|
"三攻": 0,
|
|
"光强": 0,
|
|
"光抗": 0,
|
|
"冰强": 0,
|
|
"冰抗": 0,
|
|
"力智": 0,
|
|
"四维": 0,
|
|
"技攻": 0,
|
|
"攻击强化": 0,
|
|
"攻击强化百分比": 0,
|
|
"攻速": 0,
|
|
"暗强": 0,
|
|
"暗抗": 0,
|
|
"火强": 0,
|
|
"火抗": 0,
|
|
},
|
|
)
|
|
)
|
|
|
|
def jade_upgrade(self):
|
|
temp = []
|
|
from core.equipment.jade import get_jade_setinfo, get_jadefunc_by_id
|
|
|
|
num_range = [26001, 26020]
|
|
if self.类型 == "辅助":
|
|
num_range = [26011, 26206]
|
|
for jade in get_jade_setinfo():
|
|
if jade["id"] > num_range[0] and jade["id"] <= num_range[1]:
|
|
char = deepcopy(self)
|
|
func = get_jadefunc_by_id(jade["id"])
|
|
func(char, value=jade["max"])
|
|
char.__计算前预处理()
|
|
temp.append(
|
|
{
|
|
"id": jade["id"],
|
|
"name": jade["props"]
|
|
+ " "
|
|
+ ("" if jade["max"] == 1 else ("+" + str(jade["max"])))
|
|
+ jade["unit"],
|
|
"damage": round(char.结果计算()["total_data"], 2),
|
|
"order": jade["order"],
|
|
}
|
|
)
|
|
return temp
|
|
|
|
def 异常保有率计算(self, pa, cur):
|
|
if cur == "灼伤破冰":
|
|
冰冻CD = min(
|
|
self.异常时间["冰冻"][3], get_global_data("bd_cd", self.equVersion)
|
|
)
|
|
# 不带鞋子,内置3秒结算CD
|
|
if not self.check_equ_by_name("信守誓约的步伐"):
|
|
冰冻CD = max(3, 冰冻CD)
|
|
# 破韧后,原本的CD是多少就是多少
|
|
if get_global_data("control_state", self.equVersion):
|
|
冰冻CD = min(
|
|
self.异常时间["冰冻"][3],
|
|
冰冻CD,
|
|
get_global_data("bd_cd", self.equVersion),
|
|
)
|
|
灼伤 = self.异常时间["灼伤"]
|
|
return max(1 - (2 * 冰冻CD + 1) / (4 * (灼伤[0] * 灼伤[2] + 灼伤[1])), 0)
|
|
else:
|
|
if self.get_eq_params(f"{cur}-结算") == 0:
|
|
return 0
|
|
持续时间 = (
|
|
self.异常时间[cur][0] * self.异常时间[cur][2] + self.异常时间[cur][1]
|
|
)
|
|
异常CD = min(
|
|
self.异常时间[cur][3],
|
|
get_global_data(pa.split("_")[0] + "_cd", self.equVersion, 99),
|
|
)
|
|
if self.check_equ_by_name("承诺誓约的腰带"):
|
|
异常CD = max(0.5, 异常CD)
|
|
return max(1 - (2 * 异常CD + 1) / (4 * 持续时间), 0)
|
|
|
|
def calc(
|
|
self,
|
|
setName: str = "set",
|
|
equipList: List[int] = [],
|
|
withJade=False,
|
|
withSet=False,
|
|
info=None,
|
|
):
|
|
self.calc_init(info, equipList)
|
|
jade = []
|
|
# cus = []
|
|
# merge = []
|
|
if withJade:
|
|
jade = self.jade_upgrade()
|
|
# if withCus and self.类型 != '辅助':
|
|
# cus = self.cus_upgrade(CusPosition)
|
|
# if withMerge and self.类型 != '辅助':
|
|
# merge = self.merge_upgrade()
|
|
self.__计算前预处理()
|
|
temp = self.结果计算()
|
|
calc_info = {}
|
|
|
|
if self.类型 == "辅助":
|
|
calc_info[self.适用属性] = self.站街系数()
|
|
elif self.类型 == "物理百分比":
|
|
calc_info["力量"] = self.基础面板力量()
|
|
calc_info["物理攻击"] = self.站街物理攻击力()
|
|
elif self.类型 == "魔法百分比":
|
|
calc_info["智力"] = self.基础面板智力()
|
|
calc_info["魔法攻击"] = self.站街魔法攻击力()
|
|
elif self.类型 == "物理固伤":
|
|
calc_info["力量"] = self.基础面板力量()
|
|
calc_info["独立攻击"] = self.站街独立攻击力()
|
|
elif self.类型 == "魔法固伤":
|
|
calc_info["智力"] = self.基础面板智力()
|
|
calc_info["独立攻击"] = self.站街独立攻击力()
|
|
# print(suitInfo)
|
|
calc_info["火"] = int(self.火属性强化())
|
|
calc_info["冰"] = int(self.冰属性强化())
|
|
calc_info["光"] = int(self.光属性强化())
|
|
calc_info["暗"] = int(self.暗属性强化())
|
|
calc_info["火抗"] = self.火属性抗性()
|
|
calc_info["冰抗"] = self.冰属性抗性()
|
|
calc_info["光抗"] = self.光属性抗性()
|
|
calc_info["暗抗"] = self.暗属性抗性()
|
|
|
|
for i in self.技能栏:
|
|
倍率 = i.独立攻击力倍率(self.武器类型)
|
|
if i.名称 not in self.skills_passive:
|
|
continue
|
|
if 倍率 != 1:
|
|
self.skills_passive[i.名称]["info"].append(
|
|
{
|
|
"type": "独立攻击力",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
倍率 = i.魔法攻击力倍率(self.武器类型)
|
|
if 倍率 != 1:
|
|
self.skills_passive[i.名称]["info"].append(
|
|
{
|
|
"type": "魔法攻击力",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
倍率 = i.物理攻击力倍率(self.武器类型)
|
|
if 倍率 != 1:
|
|
self.skills_passive[i.名称]["info"].append(
|
|
{
|
|
"type": "物理攻击力",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
倍率 = i.独立攻击力倍率进图(self.武器类型)
|
|
if i.名称 not in self.skills_passive:
|
|
continue
|
|
if 倍率 != 1:
|
|
self.skills_passive[i.名称]["info"].append(
|
|
{
|
|
"type": "独立攻击力[进图]",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
倍率 = i.魔法攻击力倍率进图(self.武器类型)
|
|
if 倍率 != 1:
|
|
self.skills_passive[i.名称]["info"].append(
|
|
{
|
|
"type": "魔法攻击力[进图]",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
倍率 = i.物理攻击力倍率进图(self.武器类型)
|
|
if 倍率 != 1:
|
|
self.skills_passive[i.名称]["info"].append(
|
|
{
|
|
"type": "物理攻击力[进图]",
|
|
"info": [round((倍率 - 1) * 100), "所有", ""],
|
|
}
|
|
)
|
|
buff = self.get_skill_by_name("BUFF")
|
|
awake = self.get_skill_by_name("一次觉醒")
|
|
|
|
skills_passive = {}
|
|
for i in self.skills_passive.keys():
|
|
if len(self.skills_passive[i].get("info", [])) > 0:
|
|
skills_passive[i] = self.skills_passive[i]
|
|
|
|
result = {
|
|
"id": uuid1().hex,
|
|
"alter": self.实际名称,
|
|
"name": self.名称,
|
|
"role": "buffer" if self.类型 == "辅助" else "delear",
|
|
"equips_forge": self.打造,
|
|
"suits": self.suitInfo,
|
|
"info": {
|
|
# 站街
|
|
"站街": calc_info,
|
|
# 词条
|
|
"properties": {
|
|
# 攻击强化
|
|
"攻击强化": round(self.__攻击强化, 0),
|
|
"buffer_power": round(self.BUFF量(), 0),
|
|
"buffer_power_value": round(self.__buff量, 0),
|
|
"buffer_power_per": round(self.__百分比buff量 * 100, 2),
|
|
"技能攻击力": round(100 * (self.技能攻击力 - 1), 2),
|
|
"面板技能攻击力": round(100 * (self.__面板技能攻击力 - 1), 2),
|
|
"百分比攻击强化": round(self.__百分比攻击强化 * 100, 1),
|
|
"MP消耗量": round(self.__MP消耗量 * 100 - 100, 2),
|
|
"伤害比例": [
|
|
self.伤害比例.get("直伤", 1),
|
|
self.伤害比例.get("中毒", 0),
|
|
self.伤害比例.get("灼伤", 0),
|
|
self.伤害比例.get("感电", 0),
|
|
self.伤害比例.get("出血", 0),
|
|
],
|
|
"伤害系数": [
|
|
self.伤害系数.get("直伤", 1),
|
|
self.伤害系数.get("中毒", 1) - 1,
|
|
self.伤害系数.get("灼伤", 1) - 1,
|
|
self.伤害系数.get("感电", 1) - 1,
|
|
self.伤害系数.get("出血", 1) - 1,
|
|
],
|
|
"技能范围": self.get_eq_params("skill_range"),
|
|
"技能范围∏": self.get_eq_params("skill_range_multi", 1),
|
|
"保护罩": self.get_eq_params("protect")
|
|
* (1 + self.get_eq_params("protect_max")),
|
|
# '无色消耗': temp['无色消耗'],
|
|
"apply_value": self.适用数值,
|
|
"buff_level": buff.等级,
|
|
"buff_name": buff.名称,
|
|
"awake_level": awake.等级,
|
|
"awake_name": awake.名称,
|
|
"buff_intstr_per": self.__buff百分比力智,
|
|
"buff_intstr": self.__buff固定力智,
|
|
"buff_attack_per": self.__buff百分比三攻,
|
|
"buff_attack": self.__buff固定三攻,
|
|
"awake_intstr_per": self.__觉醒百分比力智,
|
|
"awake_intstr": self.__觉醒固定力智,
|
|
"攻击速度": self.__攻击速度,
|
|
"其他攻击速度": self.__攻击速度_其他,
|
|
"施放速度": self.__施放速度,
|
|
"移动速度": self.__移动速度,
|
|
"cdr": temp.get("CDR", []),
|
|
"冷却缩减": self.冷却缩减 * (1 - self.__加算冷却缩减),
|
|
"冷却恢复": self.冷却恢复,
|
|
"defense": self.get_eq_params("defense"),
|
|
"defense_ratio": self.get_eq_params("defense_ratio"),
|
|
"hurted_ratio": self.get_eq_params("hurted_ratio"),
|
|
"era": round(
|
|
(
|
|
1
|
|
- (
|
|
1
|
|
- self.get_eq_params("defense")
|
|
* (1 + self.get_eq_params("defense_ratio"))
|
|
/ (
|
|
100000
|
|
+ self.get_eq_params("defense")
|
|
* (1 + self.get_eq_params("defense_ratio"))
|
|
)
|
|
)
|
|
* (1 - self.get_eq_params("hurted_ratio"))
|
|
)
|
|
* 100,
|
|
2,
|
|
),
|
|
},
|
|
},
|
|
"total_data": temp["buffer_addition"]
|
|
if "buffer_addition" in temp
|
|
else [temp["total_data"], 0, 0, 0],
|
|
"skills": temp["skills"],
|
|
"skills_passive": skills_passive,
|
|
"specificity": info.get("specificity", []),
|
|
"jade": sorted(jade, key=lambda x: x["order"]),
|
|
"talisman_set":info.get("talisman_set", []),
|
|
"rune_set":info.get("rune_set", []),
|
|
# "cus": cus,
|
|
"tip_part": self.tip_part,
|
|
}
|
|
|
|
if withSet:
|
|
result["forge_set"] = info["forge_set"]
|
|
result["equips"] = list(
|
|
map(lambda x: get_equ(self.equVersion).get_json(x), self.装备栏)
|
|
)
|
|
result["merge_list"] = self.武器融合
|
|
result["fusion_list"] = self.融合列表
|
|
result["customize"] = info["customize"]
|
|
|
|
for 抗性 in [
|
|
"出血",
|
|
"中毒",
|
|
"灼伤",
|
|
"感电",
|
|
"冰冻",
|
|
"减速",
|
|
"眩晕",
|
|
"诅咒",
|
|
"失明",
|
|
"石化",
|
|
"睡眠",
|
|
"混乱",
|
|
"束缚",
|
|
]:
|
|
result["info"]["properties"][抗性 + "抗性"] = self.异常抗性获取(抗性) * 100
|
|
return result
|
|
|
|
|
|
def createCharacter(alter: str, equVersion: str = "0"):
|
|
character: Character = None
|
|
module_name = "core.characters." + alter
|
|
try:
|
|
character = importlib.import_module(module_name).classChange(equVersion)
|
|
except Exception as ex:
|
|
print(ex)
|
|
print("create character " + module_name + " error.")
|
|
pass
|
|
return character
|