This commit is contained in:
2026-08-11 18:31:10 +08:00
parent ad55847d33
commit f65dc0a928
12 changed files with 102 additions and 68 deletions
+6
View File
@@ -12,9 +12,15 @@ class CharacterProperty(ABC):
STR: float
"""力量"""
PSTR: float
"""力量%"""
INT: float
"""智力"""
PINT: float
"""智力%"""
Spirit: float
"""精神"""
+2
View File
@@ -110,6 +110,8 @@ class CharacterBase(CharacterProperty):
# 工会四维
self.STR = 0 + 120
self.INT = 0 + 120
self.PSTR = 1.0
self.PINT = 1.0
self.Spirit = 0 + 120
self.Vitality = 0 + 120
# 唤醒的情况下的基础数据
+21 -12
View File
@@ -27,23 +27,25 @@ class CalcCarryMixin(CharacterBase):
"""计算属性系数"""
attrs = []
if self.输出类型 == '物理百分比':
attrs.extend(['STR', 'AtkP', 'PAtkP'])
attrs.extend(['STR', 'PSTR', 'AtkP', 'PAtkP'])
if self.输出类型 == '魔法百分比':
attrs.extend(['INT', 'AtkM', 'PAtkM'])
attrs.extend(['INT', 'PINT', 'AtkM', 'PAtkM'])
if self.输出类型 == '物理固伤':
attrs.extend(['STR', 'AtkI', 'PAtkI'])
attrs.extend(['STR', 'PSTR', 'AtkI', 'PAtkI'])
if self.输出类型 == '魔法固伤':
attrs.extend(['INT', 'AtkI', 'PAtkI'])
attrs.extend(['INT', 'PINT', 'AtkI', 'PAtkI'])
# 力智系数
value0_1 = getattr(self, attrs[0])
value0_2 = get_base_attributes(self.role, self.name)[0] if attrs[0] == 'STR' else get_base_attributes(self.role, self.name)[1]
value0_2 = get_base_attributes(self.role, self.name)[0 if attrs[0] == 'STR' else 1]
# 系统奶及奶系增幅
value = value0_1 + ((value0_1 - value0_2) * 3.08 + 2886) * (1 if DSB else 0) + (170000 + 300000) * (1 if BUFF else 0)
ratio_0: float = value / 250 + 1
# 黑暗武士力智系数部分,特效不享受这部分
ratio_10 = (value * (getattr(self, attrs[1]) + 1) / 250 + 1) / ratio_0
# 物理/魔法/独立攻击力
ratio_1: float = getattr(self, attrs[1]) + 30000 * (1 if BUFF else 0)
ratio_1: float = getattr(self, attrs[2]) + 30000 * (1 if BUFF else 0)
# 技能 物理/魔法/独立攻击力%
ratio_2: float = getattr(self, attrs[2])
ratio_2: float = getattr(self, attrs[3])
# 属强系数
ratio_3 = max(self.ElementDB.values()) * 0.0045 + 1.05
# 暴击系数
@@ -59,9 +61,9 @@ class CalcCarryMixin(CharacterBase):
ratio_8 = 1 - monster_defense / (monster_defense + 200 * 100)
# 杂项
ratio_9 = 1.0 * self.ElementIncrease
return (ratio_0, ratio_1, ratio_2, ratio_3, ratio_4, ratio_5, ratio_6, ratio_7, ratio_8, ratio_9)
return (ratio_0, ratio_1, ratio_2, ratio_3, ratio_4, ratio_5, ratio_6, ratio_7, ratio_8, ratio_9, ratio_10)
def calc_carry_skills(self, DSB: bool, BUFF: bool):
def calc_character_skill(self):
skillInfos = []
for i in self.skills:
if i.damage and i.lv > 0:
@@ -84,13 +86,20 @@ class CalcCarryMixin(CharacterBase):
'type': i.type,
}
)
return skillInfos
def calc_equipment_skill(self):
...
def calc_carry_skills(self, DSB: bool, BUFF: bool):
skillInfos = self.calc_character_skill()
ratios = self.calc_damage_ration(DSB, BUFF)
ratio_char_skill = ratios[0] * ratios[1] * ratios[2] * ratios[3] * ratios[4] * ratios[5] * ratios[6] * ratios[7] * ratios[8] * ratios[9] / 1000
ratuio_equ_skill = ratios[0] * ratios[1] * ratios[3] * ratios[4] * ratios[6] * ratios[7] * ratios[8] * ratios[9] / 1000
ratio_char_skill = ratios[0] * ratios[1] * ratios[2] * ratios[3] * ratios[4] * ratios[5] * ratios[6] * ratios[7] * ratios[8] * ratios[9] * ratios[10] / 1000
ratio_equ_skill = ratios[0] * ratios[1] * ratios[3] * ratios[4] * ratios[6] * ratios[7] * ratios[8] * ratios[9] / 1000
for i in skillInfos:
i['damage'] = ratio_char_skill * i['data'] * i['ratio'] / 100
for i in self.equ_effect:
skillInfos.append({'name': i.name, 'icon': i.icon, 'lv': 0, 'data': i.data, 'ratio': 10.0, 'cd': i.cd, 'damage': ratuio_equ_skill * i.data * 10 * self.EquEffectRatio / 100, 'mode': ''})
skillInfos.append({'name': i.name, 'icon': i.icon, 'lv': 0, 'data': i.data, 'ratio': 10.0, 'cd': i.cd, 'damage': ratio_equ_skill * i.data * 10 * self.EquEffectRatio / 100, 'mode': ''})
return skillInfos
def get_carry_info(self):
+24 -8
View File
@@ -1,4 +1,5 @@
# 17e417b31686389eebff6d754c3401ea
from core.basic.character.calc_carry import _skill_error_context
from core.basic.skill import PassiveSkill, ActiveSkill, get_data
from core.basic.character import Character
@@ -23,6 +24,19 @@ class DarkKnightSkill(ActiveSkill):
# 连续技所在列,-1表示不在连续技中
comboCol = -1
def getSkillCD(self, mode=None):
# 排列技能,先不计算冷却时间恢复
cdRecover = self.cdRecover if self.comboCol >= 0 else 1
return max(0, round(max(self.cd * 0.3, self.cd * self.cdReduce / cdRecover * self.getWeaponCDRatio() * self.getQuickCDRatio()) * self.cdRatio - self.cdCut / cdRecover , 2))
def skillInfo(self, mode = None):
res = super().skillInfo(mode)
powers = [1,1.3,1.5,1.8,2]
power = 1.0
if self.stage > 0:
power = powers[self.stage - 1]
return res[0], res[1] * power, res[2]
# 暗影斩
# extra/dark_knight/eb71e1d82d92c7e1d40500a0dcd77aa6
# 17e417b31686389eebff6d754c3401ea/eb71e1d82d92c7e1d40500a0dcd77aa6
@@ -2183,7 +2197,7 @@ class classChange(Character):
if (skillType == 'all' or skill.type == skillType) and skill.lv > 0:
skill.lv += lv
def calc_carry_skills(self, DSB: bool, BUFF: bool):
def calc_character_skill(self):
skillInfos = []
for i in self.skills:
if i.damage and i.lv > 0:
@@ -2204,13 +2218,15 @@ class classChange(Character):
'mode': mode,
'learnLv': i.learnLv,
'type': i.type,
'cdRecover': i.cdRecover,
'combo': getattr(i, 'comboCol', None),
}
)
ratios = self.calc_damage_ration(DSB, BUFF)
ratio_char_skill = ratios[0] * ratios[1] * ratios[2] * ratios[3] * ratios[4] * ratios[5] * ratios[6] * ratios[7] * ratios[8] * ratios[9] / 1000
ratuio_equ_skill = ratios[0] * ratios[1] * ratios[3] * ratios[4] * ratios[6] * ratios[7] * ratios[8] * ratios[9] / 1000
for i in skillInfos:
i['damage'] = ratio_char_skill * i['data'] * i['ratio'] / 100
for i in self.equ_effect:
skillInfos.append({'name': i.name, 'icon': i.icon, 'lv': 0, 'data': i.data, 'ratio': 10.0, 'cd': i.cd, 'damage': ratuio_equ_skill * i.data * 10 * self.EquEffectRatio / 100, 'mode': ''})
for comboCol in [0,1,2,3,4,5]:
skills = list(filter(lambda x: x['combo'] == comboCol, skillInfos))
cdList = [x['cd'] for x in skills]
cdRecoverList = [x['cdRecover'] for x in skills]
total = sum(cdList)
totalRecover = sum(cdRecoverList)
return skillInfos