feat:优化职业技能关联实现

This commit is contained in:
2026-10-13 15:57:28 +08:00
parent 15c3bff467
commit 7dc5f4cde5
20 changed files with 875 additions and 161 deletions
+1 -8
View File
@@ -1439,14 +1439,7 @@ class Skill38(CreatorActiveSkill):
mode = ['秒炸', '常规']
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName("创世").lv
@lv.setter
def lv(self, value):
...
level_source = '创世'
def setMode(self, mode):
if mode == '秒炸':
@@ -2210,14 +2210,7 @@ class Skill48(ActiveSkill):
hit2 = 8
dataType2 = EnumDamageType.ENCHANTPOISON
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName("万毒噬心诀").lv
@lv.setter
def lv(self, value):
...
level_source = '万毒噬心诀'
# 身化万毒
# fighter_female/brawler_female/78b86e64fbb74c1db1b71c50a5ac21cd
@@ -1361,14 +1361,7 @@ class Skill40(ActiveSkill):
data0 = get_data(f'{prefix}/{uuid}', 0)
hit0 = 1
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName("烈焰焚步").lv
@lv.setter
def lv(self, value):
...
level_source = '烈焰焚步'
# 飞燕旋风
# fighter_male/striker_male/8e358ecf99ac9df31a6132aeafe378a9
@@ -682,7 +682,7 @@ class Skill22(PassiveSkill):
def effect(self, old, new):
skills = []
for i in self.char.skills:
if i.type == "active" and i.learnLv not in [50,85,100] and i.damage and i.lv > 0:
if i.type == "active" and i.learnLv not in [50,85,100] and i.damage and self.char.skill_effects.is_learned(i):
skills.append(i.name)
self.associate = [{"type":"+lv","data":[0] + [1]*self.maxLv,"ratio":1,"skills":skills}]
super().effect(old, new)
@@ -672,7 +672,7 @@ class Skill22(PassiveSkill):
def effect(self, old, new):
skills = []
for i in self.char.skills:
if i.type == "active" and i.learnLv not in [50,85,100] and i.damage and i.lv > 0:
if i.type == "active" and i.learnLv not in [50,85,100] and i.damage and self.char.skill_effects.is_learned(i):
skills.append(i.name)
self.associate = [{"type":"+lv","data":[0] + [1]*self.maxLv,"ratio":1,"skills":skills}]
super().effect(old, new)
@@ -912,25 +912,10 @@ class Skill25(ActiveSkill):
# 蓄气时间上限减少率 : {value3}%
data3 = get_data(f'{prefix}/{uuid}', 3)
_ratio = 1
ratio = 1.0
associate = [{"type":"*cdRatio","data":data1,"skills":['冰墙', '元素之门', '元素之幕', '元素震荡', '圣灵水晶', '烈焰冲击','天雷', '雷旋', '杰克降临', '湮灭黑洞', '极冰盛宴', '虚无之球', '光与暗的交响']}]
@property
def ratio(self):
return self._ratio
@ratio.setter
def ratio(self, value):
if self._ratio != value:
data = self.associate[0]
ratio = (1 - data['data'][self.lv] / 100 * value) / (1 - data['data'][self.lv] / 100 * self._ratio)
for item in data['skills']:
skill = self.char.GetSkillByName(item)
if skill is not None:
skill.cdRatio *= ratio
self._ratio = value
# 技能等级变化的时候,系数对应的数值变化
def update_skill_attribute(self, skill, type, old, new, data, ratio=100, weapon=(), weapon_type=None, weapon_options=()):
super().update_skill_attribute(skill, type, old, new, data, ratio / self.ratio, weapon, weapon_type, weapon_options)
@@ -1139,25 +1124,10 @@ class Skill31(PassiveSkill):
# 所有属性抗性增加值 : {value1}
data1 = get_data(f'{prefix}/{uuid}', 1)
_ratio = 1
ratio = 1.0
associate = [{"type":"*skillDamage","data":data0}]
@property
def ratio(self):
return self._ratio
@ratio.setter
def ratio(self, value):
if self._ratio != value:
data = self.associate[0]
ratio = (1 + data['data'][self.lv] / 100 * value) / (1 + data['data'][self.lv] / 100 * self._ratio)
for item in self.char.GetSkillNames('all', True):
skill = self.char.GetSkillByName(item)
if skill is not None:
skill.skillRation *= ratio
self._ratio = value
# 技能等级变化的时候,系数对应的数值变化
def update_skill_attribute(self, skill, type, old, new, data, ratio=100, weapon=(), weapon_type=None, weapon_options=()):
super().update_skill_attribute(skill, type, old, new, data, ratio / self.ratio, weapon, weapon_type, weapon_options)
@@ -2924,14 +2924,7 @@ class Skill60(ActiveSkill):
# 自身强化
skillDamage = 1.15
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName("传说召唤 : 逆月者拉莫斯").lv
@lv.setter
def lv(self, value):
...
level_source = '传说召唤 : 逆月者拉莫斯'
# 逆月
# mage_female/summoner/10834437b54f67c4c27f92eaabd59bb1
@@ -2505,13 +2505,7 @@ class Skill49(ActiveSkill):
associate = [{'data': data3, 'skills': ['变异苍蝇拍', '超级苍蝇拍', '改良舒露露', '改良魔法星弹', '暗影斗篷', '技艺融合', '超级棒棒糖', '光电兔', '雪人刨冰', '乌洛波洛斯之环', '糖果大作战精怪乐园', '糖果大作战捣蛋杰克']}, {'data': data4, 'type': '+powerFail', 'skills': ['熔岩药瓶', '暴炎加热炉', '冰霜钻孔车']}]
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName('贤者之石').lv
@lv.setter
def lv(self, value): ...
level_source = '贤者之石'
def getSkillData(self, lv = 0):
pre = self.char.GetSkillByName('超级苍蝇拍')
@@ -1383,14 +1383,7 @@ class Skill33(ActiveSkill):
associate = [{"data": [0] + [10]*maxLv,"skills":[name]}]
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName("魔化 : 末日守卫者").lv
@lv.setter
def lv(self, value):
...
level_source = '魔化 : 末日守卫者'
def skillInfo(self, mode = None):
pre = self.char.GetSkillByName("魔化 : 末日守卫者")
@@ -1725,13 +1725,7 @@ class Skill47(ActiveSkill):
hasVP = False
hasUP = False
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName('神圣洗礼 : 信仰之翼').lv
@lv.setter
def lv(self, value): ...
level_source = '神圣洗礼 : 信仰之翼'
# 爆炸攻击力 : {value0}
data0 = get_data(f'{prefix}/{uuid}', 0)
@@ -652,13 +652,7 @@ class Skill21(ActiveSkill):
# 范围比率 : {value3}%
data3 = get_data(f'{prefix}/{uuid}', 3)
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName("三才回轮剑").lv
@lv.setter
def lv(self, value): ...
level_source = '三才回轮剑'
# 轮回剑
# swordman_female/vegabond/852f8ad797db4dca1405cb3e77198401
@@ -695,13 +689,7 @@ class Skill22(ActiveSkill):
# 范围比率 : {value3}%
data3 = get_data(f'{prefix}/{uuid}', 3)
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName("三才回轮剑").lv
@lv.setter
def lv(self, value): ...
level_source = '三才回轮剑'
# 三才回轮剑
# swordman_female/vegabond/ab6fc3303df03b58911967dfca2b5d07
@@ -1052,14 +1052,7 @@ class Skill31(ActiveSkill):
data0 = get_data(f'{prefix}/{uuid}', 0)
hit0 = 3
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName("鬼连击").lv
@lv.setter
def lv(self, value):
...
level_source = '鬼连击'
def getSkillCD(self,mode=None):
return self.char.GetSkillByName("鬼连击").getSkillCD(mode)
@@ -1746,13 +1746,7 @@ class Skill42(ActiveSkill):
# [冥炎剑]最后一击范围比率 : {value4}%
data4 = get_data(f'{prefix}/{uuid}', 4)
@property
def lv(self):
"""技能等级"""
return self.char.GetSkillByName('冥炎之卡洛').lv
@lv.setter
def lv(self, value): ...
level_source = '冥炎之卡洛'
def vp_1(self):
"""
+2 -18
View File
@@ -742,26 +742,10 @@ class Skill20(ActiveSkill):
# 7点 : {value7}%
data7 = get_data(f'{prefix}/{uuid}', 7)
_maxLayer = 6
maxLayer = 6
associate = [{'type': '*endpower', 'data': data0}, {'type': '*endpower'}]
@property
def maxLayer(self):
return self._maxLayer
@maxLayer.setter
def maxLayer(self, value):
if self._maxLayer != value:
skills = self.char.GetSkillNames('all', True)
if self.lv > 0:
raito = (getattr(self, f'data{int(value)}')[self.lv] - 100) / (getattr(self, f'data{int(self.maxLayer)}')[self.lv] - 100)
for name in skills:
skill = self.char.GetSkillByName(name)
if skill.type == 'active' and skill.damage:
skill.endpower *= raito
self._maxLayer = value
def update_skill_attribute(self, skill, type, old, new, data, ratio=100, weapon=(), weapon_type=None, weapon_options=()):
if len(data) == 0:
data = getattr(self, f'data{int(self.maxLayer)}')
@@ -1080,7 +1064,7 @@ class Skill27(PassiveSkill):
associate = [
{'type': '$*PAtkP', 'data': data0},
{'type': '*cdReduce', 'data': data1, 'exceptSkills': []},
{'type': '+maxLayer', 'data': data2, 'ratio': 1, 'skills': ['终结追击']},
{'type': '+maxLayer', 'data': data2, 'ratio': 1, 'skills': ['终结之击']},
]
# 旋舞斩