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

This commit is contained in:
2026-10-13 17:10:08 +08:00
parent 7dc5f4cde5
commit 927866d366
78 changed files with 5242 additions and 1011 deletions
+87 -21
View File
@@ -1,6 +1,31 @@
# b9cb48777665de22c006fabaf9a560b3
from core.basic.skill import PassiveSkill, ActiveSkill, get_data
from core.basic.character import Character
from core.basic.skill_effect_types import (
All,
CharacterAttribute,
CharacterEffect,
Equals,
GreaterThan,
LevelTable,
MissingTargetPolicy,
Not,
Operation,
Percent,
ProfessionAttribute,
Read,
SkillAttribute,
SkillEffect,
)
class TravelerAttribute(ProfessionAttribute):
"""本职业专用的最终效果属性;字段含义与技能实现保持一致。"""
TRAVELER_CDR = 'travelerCDR'
"""旅人:装载模式的冷却缩减参数。"""
TRAVELER_DAMAGE = 'travelerDamage'
"""旅人:装载模式的伤害加成参数。"""
prefix = "archer/traveler/cn/skillDetail"
@@ -172,7 +197,11 @@ class Skill4(PassiveSkill):
# 跳跃攻击力变化率 : {value2}%
data2 = get_data(f'{prefix}/{uuid}', 2)
associate = [{'type': '*skillDamage', 'data': [i - 100 if i > 0 else 0 for i in data0], 'skills': ['迷雾箭雨']}]
# 迁移前实现(保留对照):
# associate = [{'type': '*skillDamage', 'data': [i - 100 if i > 0 else 0 for i in data0], 'skills': ['迷雾箭雨']}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable([i - 100 if i > 0 else 0 for i in data0])), skills=['迷雾箭雨']),
]
# 受身蹲伏
# archer/traveler/ce26c6b69d02a440a81b552bec94f03b
@@ -592,7 +621,11 @@ class Skill17(PassiveSkill):
# 命中率增加 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{'type': '$*PAtkP', 'data': data0}]
# 迁移前实现(保留对照):
# associate = [{'type': '$*PAtkP', 'data': data0}]
associate = [
CharacterEffect(attribute=CharacterAttribute.P_ATK_P, value=1 + Percent(LevelTable(data0))),
]
# 暴击
# archer/traveler/fc1262c19f3d0477ee8eda47b8db8696
@@ -790,7 +823,11 @@ class Skill23(ActiveSkill):
# 暴击伤害增加率 : {value3}%
data3 = get_data(f'{prefix}/{uuid}', 3)
associate = [ {"data": data3}]
# 迁移前实现(保留对照):
# associate = [ {"data": data3}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data3))),
]
# 高原雾花
# archer/traveler/42c82812f86ff6704ae9952a2e6093a4
@@ -932,7 +969,11 @@ class Skill26(ActiveSkill):
# 空中施放技能结束后霸体护甲持续时间 : {value2}秒
data2 = get_data(f'{prefix}/{uuid}', 2)
associate = [{'data': data0, 'type': '=travelerDamage', 'skills': ['装置驱动', '浓雾暴雨', '登跃飞锚', '神雾兵仗·妖旋风', '流雾疾风', '装载 : 烟花漫天', '装置驱动·星云', '神雾兵仗·流星']}]
# 迁移前实现(保留对照):
# associate = [{'data': data0, 'type': '=travelerDamage', 'skills': ['装置驱动', '浓雾暴雨', '登跃飞锚', '神雾兵仗·妖旋风', '流雾疾风', '装载 : 烟花漫天', '装置驱动·星云', '神雾兵仗·流星']}]
associate = [
SkillEffect(attribute=TravelerAttribute.TRAVELER_DAMAGE, operation=Operation.ASSIGN, value=LevelTable(data0), skills=['装置驱动', '浓雾暴雨', '登跃飞锚', '神雾兵仗·妖旋风', '流雾疾风', '装载 : 烟花漫天', '装置驱动·星云', '神雾兵仗·流星'], missing_target=MissingTargetPolicy.SKIP),
]
# 浓雾暴雨
# archer/traveler/ade01c1d6afc8a05055225045e89fe49
@@ -1106,7 +1147,11 @@ class Skill29(PassiveSkill):
# 技能和消耗品生命值、 魔法值恢复效果增加率 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{'data': data0, 'type': '*skillDamage'}]
# 迁移前实现(保留对照):
# associate = [{'data': data0, 'type': '*skillDamage'}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 旷野火炎
# archer/traveler/506e7ed77d517419a6e1c437a2cedb17
@@ -1175,7 +1220,11 @@ class Skill31(PassiveSkill):
# 增益最大持续时间 : {value1}秒
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{'data': data0, 'type': '=travelerCDR', 'skills': ['装置驱动', '浓雾暴雨', '登跃飞锚', '神雾兵仗·妖旋风', '流雾疾风', '装载 : 烟花漫天', '装置驱动·星云', '神雾兵仗·流星']}]
# 迁移前实现(保留对照):
# associate = [{'data': data0, 'type': '=travelerCDR', 'skills': ['装置驱动', '浓雾暴雨', '登跃飞锚', '神雾兵仗·妖旋风', '流雾疾风', '装载 : 烟花漫天', '装置驱动·星云', '神雾兵仗·流星']}]
associate = [
SkillEffect(attribute=TravelerAttribute.TRAVELER_CDR, operation=Operation.ASSIGN, value=LevelTable(data0), skills=['装置驱动', '浓雾暴雨', '登跃飞锚', '神雾兵仗·妖旋风', '流雾疾风', '装载 : 烟花漫天', '装置驱动·星云', '神雾兵仗·流星'], missing_target=MissingTargetPolicy.SKIP),
]
# 登跃飞锚
# archer/traveler/a5fa08f5d509e6ff2ebc68856a470b5a
@@ -1311,10 +1360,14 @@ class Skill33(TravelerActiveSkill):
self.cd = 22.5
self.skillRation *= 0.5
def effect(self, old, new):
if self.vp == 2:
self.associate = [{'type': '*skillRation', 'data': [0] + [-17] * self.maxLv, 'skills': ['绝技袭击']}]
return super().effect(old, new)
# 迁移前实现(保留对照):
# def effect(self, old, new):
# if self.vp == 2:
# self.associate = [{'type': '*skillRation', 'data': [0] + [-17] * self.maxLv, 'skills': ['绝技袭击']}]
# return super().effect(old, new)
associate = [
SkillEffect(attribute=SkillAttribute.PANEL_RATIO, value=1 + Percent(LevelTable([0] + [-17] * maxLv)), skills=['绝技袭击'], when=Equals(Read(SkillAttribute.VP), 2)),
]
# 流浪之星的纹章
# archer/traveler/8ee0099656df08a0b39225f8a21d514b
@@ -1343,12 +1396,17 @@ class Skill34(PassiveSkill):
# [神雾兵仗·流星]冷却时间减少率 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
def effect(self, old, new):
if self.char.GetSkillByName('自动操作模式').lv > 0 and self.char.GetSkillByName('神雾兵仗·流星').vp != 2:
self.associate = [{'data': self.data0, 'type': '*skillDamage'}]
else:
self.associate = [{'data': self.data0, 'type': '*skillDamage'}, {'data': self.data1, 'type': '*cdReduce', 'skills': ['神雾兵仗·流星']}]
return super().effect(old, new)
# 迁移前实现(保留对照):
# def effect(self, old, new):
# if self.char.GetSkillByName('自动操作模式').lv > 0 and self.char.GetSkillByName('神雾兵仗·流星').vp != 2:
# self.associate = [{'data': self.data0, 'type': '*skillDamage'}]
# else:
# self.associate = [{'data': self.data0, 'type': '*skillDamage'}, {'data': self.data1, 'type': '*cdReduce', 'skills': ['神雾兵仗·流星']}]
# return super().effect(old, new)
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
SkillEffect(attribute=SkillAttribute.CD_REDUCE, value=1 - Percent(LevelTable(data1)), skills=['神雾兵仗·流星'], when=Not(All([GreaterThan(Read(SkillAttribute.LEVEL, '自动操作模式'), 0), Not(Equals(Read(SkillAttribute.VP, '神雾兵仗·流星'), 2))]))),
]
# 流雾疾风
# archer/traveler/da6e37c1e3f0e8867f70007d89c239ff
@@ -1486,10 +1544,14 @@ class Skill37(TravelerActiveSkill):
- [装置驱动]爆炸时追加小型烟花漫天\n
"""
def effect(self, old, new):
if self.vp == 2:
self.associate = [{'type': '*skillRation', 'data': [0] + [-26.6] * self.maxLv, 'skills': ['装置驱动']}]
return super().effect(old, new)
# 迁移前实现(保留对照):
# def effect(self, old, new):
# if self.vp == 2:
# self.associate = [{'type': '*skillRation', 'data': [0] + [-26.6] * self.maxLv, 'skills': ['装置驱动']}]
# return super().effect(old, new)
associate = [
SkillEffect(attribute=SkillAttribute.PANEL_RATIO, value=1 + Percent(LevelTable([0] + [-26.6] * maxLv)), skills=['装置驱动'], when=Equals(Read(SkillAttribute.VP), 2)),
]
# 神雾兵仗·北极星
# archer/traveler/a6c8f69107f8c4f5d1a0c7a57d000290
@@ -1567,7 +1629,11 @@ class Skill39(TravelerActiveSkill):
# 基本攻击力和转职技能攻击力增加率 : {value2}%
data2 = get_data(f'{prefix}/{uuid}', 2)
associate = [{'data': data2, 'type': '*skillDamage'}]
# 迁移前实现(保留对照):
# associate = [{'data': data2, 'type': '*skillDamage'}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data2))),
]
# 装置驱动 : 星云
# archer/traveler/03bb5314ffd41e9458d67ef924fef38f