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
+67 -10
View File
@@ -1,6 +1,23 @@
# ddc49e9ad1ff72a00b53c6cff5b1e920
from core.basic.skill import PassiveSkill, ActiveSkill, get_data
from core.basic.character import Character
from core.basic.skill_effect_types import (
CharacterAttribute,
CharacterEffect,
LevelTable,
Operation,
Percent,
ProfessionAttribute,
SkillAttribute,
SkillEffect,
)
class KunoichiAttribute(ProfessionAttribute):
"""本职业专用的最终效果属性;字段含义与技能实现保持一致。"""
NINPOU = 'ninpou'
"""忍者:六道轮回记录技能的伤害倍率。"""
prefix = "thief/kunoichi/cn/skillDetail"
@@ -763,7 +780,11 @@ class Skill22(PassiveSkill):
data0 = get_data(f'{prefix}/{uuid}', 0)
# 忍术技能冷却时间减少率 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{'data': data1, 'type': '*cdReduce', 'skills': ['火遁·豪火球之术', '忍法 : 幻影手里剑', '火遁·飓风煞', '火遁·螺旋手里剑', '火遁·炎天道', '火遁·蟾蜍油炎弹', '火遁·炎舞天璇', '火遁·风魔手里剑', '八岐大蛇', '天照']}] # noqa: E501
# 迁移前实现(保留对照):
# associate = [{'data': data1, 'type': '*cdReduce', 'skills': ['火遁·豪火球之术', '忍法 : 幻影手里剑', '火遁·飓风煞', '火遁·螺旋手里剑', '火遁·炎天道', '火遁·蟾蜍油炎弹', '火遁·炎舞天璇', '火遁·风魔手里剑', '八岐大蛇', '天照']}] # noqa: E501
associate = [
SkillEffect(attribute=SkillAttribute.CD_REDUCE, value=1 - Percent(LevelTable(data1)), skills=['火遁·豪火球之术', '忍法 : 幻影手里剑', '火遁·飓风煞', '火遁·螺旋手里剑', '火遁·炎天道', '火遁·蟾蜍油炎弹', '火遁·炎舞天璇', '火遁·风魔手里剑', '八岐大蛇', '天照']),
]
# 火遁·豪火球之术
# thief/kunoichi/dcb31a63ef58954f44ff2070c42a9a98
@@ -1066,7 +1087,11 @@ class Skill30(PassiveSkill):
data1 = get_data(f'{prefix}/{uuid}', 1)
# 基本攻击投掷出苦无的几率 : {value2}%
data2 = get_data(f'{prefix}/{uuid}', 2)
associate = [{'data': data0, 'type': '$*PAtkM'}]
# 迁移前实现(保留对照):
# associate = [{'data': data0, 'type': '$*PAtkM'}]
associate = [
CharacterEffect(attribute=CharacterAttribute.P_ATK_M, value=1 + Percent(LevelTable(data0))),
]
# 烈焰印记
# thief/kunoichi/374f53e8989ef04a8506c8ec99d9ecdc
@@ -1101,7 +1126,11 @@ class Skill31(PassiveSkill):
data2 = get_data(f'{prefix}/{uuid}', 2)
# 灼伤持续时间 : {value3}秒
data3 = get_data(f'{prefix}/{uuid}', 3)
associate = [{'data': data0}]
# 迁移前实现(保留对照):
# associate = [{'data': data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 火遁·螺旋手里剑
# thief/kunoichi/7e904ea3d2a9faa054604e55120a9268
@@ -1190,7 +1219,11 @@ class Skill33(ActiveSkill):
# 决斗场前置冷却时间 : {value3}秒
data3 = get_data(f'{prefix}/{uuid}', 3)
associate = [{'data': [i - 100 if i > 0 else 0 for i in data0]}]
# 迁移前实现(保留对照):
# associate = [{'data': [i - 100 if i > 0 else 0 for i in data0]}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable([i - 100 if i > 0 else 0 for i in data0]))),
]
# 火遁·炎天道
# thief/kunoichi/5152480fdde81362575a488d4cec4af9
@@ -1390,7 +1423,11 @@ class Skill36(ActiveSkill):
# 范围 : {value4}%
data4 = get_data(f'{prefix}/{uuid}', 4)
associate = [{'data': data1, 'type': '+ninpou'}] # noqa: E501
# 迁移前实现(保留对照):
# associate = [{'data': data1, 'type': '+ninpou'}] # noqa: E501
associate = [
SkillEffect(attribute=KunoichiAttribute.NINPOU, operation=Operation.ADD, value=Percent(LevelTable(data1))),
]
# 火遁·蟾蜍油炎弹
# thief/kunoichi/fc458e449ee00b01dbf88d09aae65462
@@ -1581,7 +1618,11 @@ class Skill39(PassiveSkill):
data0 = get_data(f'{prefix}/{uuid}', 0)
# 追踪标记持续时间 : {value1}秒
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{'data': data0}]
# 迁移前实现(保留对照):
# associate = [{'data': data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 毕方之印
# thief/kunoichi/2c9d9a36c8401bddff6cdb80fab8dc24
@@ -1637,7 +1678,11 @@ class Skill40(ActiveSkill):
data11 = get_data(f'{prefix}/{uuid}', 11)
hit11 = 1
associate = [{'data': data0}]
# 迁移前实现(保留对照):
# associate = [{'data': data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
def getSkillCD(self, mode=None):
return 1.0
@@ -1909,7 +1954,11 @@ class Skill44(PassiveSkill):
# [忍法 : 六道轮回]强化残影攻击速度增加率 : {value3}%
data3 = get_data(f'{prefix}/{uuid}', 3)
associate = [{"data": data0}]
# 迁移前实现(保留对照):
# associate = [{"data": data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 八岐大蛇
# thief/kunoichi/147d005ac868e0de52b1f255eea35d62
@@ -2064,7 +2113,11 @@ class Skill47(ActiveSkill):
# 锁定敌人范围 : {value5}px
data5 = get_data(f'{prefix}/{uuid}', 5)
associate = [{'data': data4, 'skills': ['天照']}]
# 迁移前实现(保留对照):
# associate = [{'data': data4, 'skills': ['天照']}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data4)), skills=['天照']),
]
mode = ['普通', '六道']
@@ -2206,7 +2259,11 @@ class Skill49(PassiveSkill):
data0 = get_data(f'{prefix}/{uuid}', 0)
# 基本攻击力和技能攻击力增加率 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{'data': data1}]
# 迁移前实现(保留对照):
# associate = [{'data': data1}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data1))),
]
# 勾玉之火 : 镰鼬
# thief/kunoichi/845e0ce3235e19f60cc82a082d072cba
+72 -18
View File
@@ -1,6 +1,16 @@
#ddc49e9ad1ff72a00b53c6cff5b1e920
from core.basic.skill import PassiveSkill, ActiveSkill, get_data
from core.basic.character import Character
from core.basic.skill_effect_types import (
Equals,
LevelTable,
Operation,
Percent,
Power,
Read,
SkillAttribute,
SkillEffect,
)
prefix = "thief/necro/cn/skillDetail"
@@ -780,7 +790,11 @@ class Skill22(PassiveSkill):
# [装备手杖时]
# 施放速度增加 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{"type":"*cdReduce","data":data0,"exceptSkills":["千魂祭","亡者君临 : 巴拉克之戮","命运殇痕·摩罗斯之咒"]}]
# 迁移前实现(保留对照):
# associate = [{"type":"*cdReduce","data":data0,"exceptSkills":["千魂祭","亡者君临 : 巴拉克之戮","命运殇痕·摩罗斯之咒"]}]
associate = [
SkillEffect(attribute=SkillAttribute.CD_REDUCE, value=1 - Percent(LevelTable(data0)), except_skills=['千魂祭', '亡者君临 : 巴拉克之戮', '命运殇痕·摩罗斯之咒']),
]
# 驱使枯灵
# thief/necro/d0cdaca82892e54097f22a1f60817048
@@ -895,7 +909,11 @@ class Skill24(ActiveSkill):
# 黑夜术士魔法防御力增加 : {value4}
data4 = get_data(f'{prefix}/{uuid}', 4)
associate = [{"data":data1,"skills":["降临 : 尼古拉斯"]}]
# 迁移前实现(保留对照):
# associate = [{"data":data1,"skills":["降临 : 尼古拉斯"]}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data1)), skills=['降临 : 尼古拉斯']),
]
# 暴击
# thief/necro/fc1262c19f3d0477ee8eda47b8db8696
@@ -1032,7 +1050,11 @@ class Skill29(PassiveSkill):
# 属性攻击力增加率 : {value0}%
data0 = get_data(f'{prefix}/{uuid}', 0)
associate = [{"data":data0}]
# 迁移前实现(保留对照):
# associate = [{"data":data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 百鬼夜行
# thief/necro/04883563896fe1adac7505c6146b5f59
@@ -1148,7 +1170,11 @@ class Skill32(PassiveSkill):
data0 = get_data(f'{prefix}/{uuid}', 0)
# [复苏者之缚]范围增加率 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{"data":data0,"exceptSkills":["降临 : 尼古拉斯"]},]
# 迁移前实现(保留对照):
# associate = [{"data":data0,"exceptSkills":["降临 : 尼古拉斯"]},]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0)), except_skills=['降临 : 尼古拉斯']),
]
# 降临 : 暴君巴拉克
# thief/necro/dcd536f1674630f01fc9667bb202b851
@@ -1247,12 +1273,19 @@ class Skill33(ActiveSkill):
self.setMode("x3")
...
# 迁移前实现(保留对照):
# associate = [
# {"type":"+power0","data":data6,"skills":["暗击拳"],"ratio":1},
# {"type":"+power1","data":data7,"skills":["暗击拳"],"ratio":1},
# {"type":"+power0","data":data8,"skills":["狂野乱舞"],"ratio":1},
# {"type":"+power0","data":data9,"skills":["巴拉克强击"],"ratio":1}
# ]
associate = [
{"type":"+power0","data":data6,"skills":["暗击拳"],"ratio":1},
{"type":"+power1","data":data7,"skills":["暗击拳"],"ratio":1},
{"type":"+power0","data":data8,"skills":["狂野乱舞"],"ratio":1},
{"type":"+power0","data":data9,"skills":["巴拉克强击"],"ratio":1}
]
SkillEffect(attribute=Power(0), operation=Operation.ADD, value=LevelTable(data6), skills=['暗击拳']),
SkillEffect(attribute=Power(1), operation=Operation.ADD, value=LevelTable(data7), skills=['暗击拳']),
SkillEffect(attribute=Power(0), operation=Operation.ADD, value=LevelTable(data8), skills=['狂野乱舞']),
SkillEffect(attribute=Power(0), operation=Operation.ADD, value=LevelTable(data9), skills=['巴拉克强击']),
]
# 暗击拳
# thief/necro/1c1a9606eb702ebe5a7bb4397f3aeae0
@@ -1478,7 +1511,11 @@ class Skill39(PassiveSkill):
# 技能攻击力增加率 : {value0}%
data0 = get_data(f'{prefix}/{uuid}', 0)
associate = [{"data":data0}]
# 迁移前实现(保留对照):
# associate = [{"data":data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 巴拉克的愤怒
# thief/necro/0ed3148658fe37b3336ccb718dc0fdb0
@@ -1642,7 +1679,11 @@ class Skill42(PassiveSkill):
data2 = get_data(f'{prefix}/{uuid}', 2)
# 暴击伤害增加率 : {value3}%
data3 = get_data(f'{prefix}/{uuid}', 3)
associate = [{"data":data2}]
# 迁移前实现(保留对照):
# associate = [{"data":data2}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data2))),
]
# 千魂祭
# thief/necro/2a3c96b88d02372505692da0a8b54743
@@ -1878,10 +1919,14 @@ class Skill46(ActiveSkill):
"""
...
def effect(self, old, new):
if self.vp == 2:
self.associate = [{"data":[0]+[-50]*self.maxLv,"skills":["降临 : 莱迪娅"]}]
return super().effect(old, new)
# 迁移前实现(保留对照):
# def effect(self, old, new):
# if self.vp == 2:
# self.associate = [{"data":[0]+[-50]*self.maxLv,"skills":["降临 : 莱迪娅"]}]
# return super().effect(old, new)
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable([0] + [-50] * maxLv)), skills=['降临 : 莱迪娅'], when=Equals(Read(SkillAttribute.VP), 2)),
]
# 亡魂之息
# thief/necro/78b86e64fbb74c1db1b71c50a5ac21cd
@@ -1907,9 +1952,14 @@ class Skill47(PassiveSkill):
data0 = get_data(f'{prefix}/{uuid}', 0)
# [暗魂波]、 [诅咒之箭]攻击力增加率 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
# 迁移前实现(保留对照):
# associate = [
# {"data":data0,"exceptSkills":["暗魂波","诅咒之箭"]},
# {"data":data1,"skills":["暗魂波","诅咒之箭"]}
# ]
associate = [
{"data":data0,"exceptSkills":["暗魂波","诅咒之箭"]},
{"data":data1,"skills":["暗魂波","诅咒之箭"]}
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0)), except_skills=['暗魂波', '诅咒之箭']),
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data1)), skills=['暗魂波', '诅咒之箭']),
]
# 暴君湮灭斩
@@ -2021,7 +2071,11 @@ class Skill50(PassiveSkill):
# 基本攻击和转职技能攻击力增加率 : {value0}%
data0 = get_data(f'{prefix}/{uuid}', 0)
associate = [{"data":data0}]
# 迁移前实现(保留对照):
# associate = [{"data":data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 亡者之茧
# thief/necro/b1ccbd90d0b40f543ece3b18fcef827f
+61 -13
View File
@@ -1,6 +1,25 @@
# ddc49e9ad1ff72a00b53c6cff5b1e920
from core.basic.skill import PassiveSkill, ActiveSkill, get_data, _get_skill_damage_suffixes, _get_skill_dataplus_suffixes
from core.basic.character import Character
from core.basic.skill_effect_types import (
CharacterAttribute,
CharacterEffect,
Constant,
Hit,
LevelTable,
Operation,
Percent,
ProfessionAttribute,
SkillAttribute,
SkillEffect,
)
class RogueAttribute(ProfessionAttribute):
"""本职业专用的最终效果属性;字段含义与技能实现保持一致。"""
END_POWER = 'endpower'
"""刺客:终结追击分组的伤害倍率。"""
prefix = "thief/rogue/cn/skillDetail"
@@ -744,13 +763,20 @@ class Skill20(ActiveSkill):
maxLayer = 6
associate = [{'type': '*endpower', 'data': data0}, {'type': '*endpower'}]
# 迁移前实现(保留对照):
# associate = [{'type': '*endpower', 'data': data0}, {'type': '*endpower'}]
associate = [
SkillEffect(attribute=RogueAttribute.END_POWER, value=1 + Percent(LevelTable(data0))),
SkillEffect(attribute=RogueAttribute.END_POWER, value=1 + Percent(Constant(0))),
]
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)}')
data = [i - 100 if i > 100 else 0 for i in data]
super().update_skill_attribute(skill, type, old, new, data, ratio, weapon, weapon_type, weapon_options)
# 迁移前实现(保留对照):
# 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)}')
# data = [i - 100 if i > 100 else 0 for i in data]
# super().update_skill_attribute(skill, type, old, new, data, ratio, weapon, weapon_type, weapon_options)
# 原第二条关联未提供 data,旧引擎默认零表,不进入空表分支;保留原有效倍率。
# 诅咒之箭
# thief/rogue/547ab2b2bd860d3e37355a9cfbc1077c
@@ -806,7 +832,11 @@ class Skill22(PassiveSkill):
# [弧光闪]追加攻击发动次数增加 : {value0}
data0 = get_data(f'{prefix}/{uuid}', 0)
associate = [{'type': '+hit0', 'data': data0, 'ratio': 1, 'skills': ['弧光闪']}]
# 迁移前实现(保留对照):
# associate = [{'type': '+hit0', 'data': data0, 'ratio': 1, 'skills': ['弧光闪']}]
associate = [
SkillEffect(attribute=Hit(0), operation=Operation.ADD, value=LevelTable(data0), skills=['弧光闪']),
]
# 迅影
# thief/rogue/1b1cfab062e0768bcc889e33e1f30dbf
@@ -1061,10 +1091,16 @@ class Skill27(PassiveSkill):
# 命中率增加 : {value10}%
data10 = get_data(f'{prefix}/{uuid}', 10)
# 迁移前实现(保留对照):
# associate = [
# {'type': '$*PAtkP', 'data': data0},
# {'type': '*cdReduce', 'data': data1, 'exceptSkills': []},
# {'type': '+maxLayer', 'data': data2, 'ratio': 1, 'skills': ['终结之击']},
# ]
associate = [
{'type': '$*PAtkP', 'data': data0},
{'type': '*cdReduce', 'data': data1, 'exceptSkills': []},
{'type': '+maxLayer', 'data': data2, 'ratio': 1, 'skills': ['终结之击']},
CharacterEffect(attribute=CharacterAttribute.P_ATK_P, value=1 + Percent(LevelTable(data0))),
SkillEffect(attribute=SkillAttribute.CD_REDUCE, value=1 - Percent(LevelTable(data1)), except_skills=[]),
SkillEffect(attribute=SkillAttribute.MAX_LAYER, operation=Operation.ADD, value=LevelTable(data2), skills=['终结之击']),
]
# 旋舞斩
@@ -1664,7 +1700,11 @@ class Skill40(PassiveSkill):
# 命中率增加 : {value4}%
data4 = get_data(f'{prefix}/{uuid}', 4)
associate = [{'data': data1}]
# 迁移前实现(保留对照):
# associate = [{'data': data1}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data1))),
]
# 月轮舞
# thief/rogue/c61f5a010370101402b05b21916c2071
@@ -1914,7 +1954,11 @@ class Skill45(PassiveSkill):
data0 = get_data(f'{prefix}/{uuid}', 0)
# 连击点数上限增加量 : {value1}个
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{'data': data0, 'type': '$*PAtkP'}]
# 迁移前实现(保留对照):
# associate = [{'data': data0, 'type': '$*PAtkP'}]
associate = [
CharacterEffect(attribute=CharacterAttribute.P_ATK_P, value=1 + Percent(LevelTable(data0))),
]
# 乱空杀
# thief/rogue/5cac3411ccef1af333953e0ded5e942d
@@ -2148,7 +2192,11 @@ class Skill50(PassiveSkill):
data2 = get_data(f'{prefix}/{uuid}', 2)
# 多段攻击间隔减少率 : {value3}%
data3 = get_data(f'{prefix}/{uuid}', 3)
associate = [{'data': data0}]
# 迁移前实现(保留对照):
# associate = [{'data': data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 影·万古星辰
# thief/rogue/ef9d26746effee9199b54541f01b8752
@@ -1,6 +1,14 @@
# ddc49e9ad1ff72a00b53c6cff5b1e920
from core.basic.skill import PassiveSkill, ActiveSkill, get_data
from core.basic.character import Character
from core.basic.skill_effect_types import (
CharacterAttribute,
CharacterEffect,
LevelTable,
Percent,
SkillAttribute,
SkillEffect,
)
prefix = "thief/shadow_dancer/cn/skillDetail"
@@ -730,7 +738,11 @@ class Skill21(PassiveSkill):
# 暴击伤害增加率 : {value0}%
data0 = get_data(f'{prefix}/{uuid}', 0)
associate = [{'data': data0}]
# 迁移前实现(保留对照):
# associate = [{'data': data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 追影步
# thief/shadow_dancer/0fbb8de70002ad34f046c94c2cb3e863
@@ -811,7 +823,11 @@ class Skill24(PassiveSkill):
# 命中率增加 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{'data': data0, 'type': '$*PAtkP'}]
# 迁移前实现(保留对照):
# associate = [{'data': data0, 'type': '$*PAtkP'}]
associate = [
CharacterEffect(attribute=CharacterAttribute.P_ATK_P, value=1 + Percent(LevelTable(data0))),
]
# 挑空
# thief/shadow_dancer/e0a072e8cef2d77893aad5f68aeed56a
@@ -1322,7 +1338,11 @@ class Skill36(PassiveSkill):
# 背击时攻击力增加率 : {value1}%
data1 = get_data(f'{prefix}/{uuid}', 1)
associate = [{'data': data1}]
# 迁移前实现(保留对照):
# associate = [{'data': data1}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data1))),
]
# 影斩·乱舞
# thief/shadow_dancer/8b08f9504167a9c0f3a1d29d71b7943e
@@ -1574,7 +1594,11 @@ class Skill41(PassiveSkill):
# 基本攻击力和技能攻击力增加量 : {value0}%
data0 = get_data(f'{prefix}/{uuid}', 0)
associate = [{'data': data0}]
# 迁移前实现(保留对照):
# associate = [{'data': data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 摧心
# thief/shadow_dancer/b163d099c8cc27fdb6fd3639c2ee6df9
@@ -1752,7 +1776,11 @@ class Skill44(PassiveSkill):
data1 = get_data(f'{prefix}/{uuid}', 1)
# [潜行领域]暗袭分身召唤数增加 : {value2}
data2 = get_data(f'{prefix}/{uuid}', 2)
associate = [{'data': data0}]
# 迁移前实现(保留对照):
# associate = [{'data': data0}]
associate = [
SkillEffect(attribute=SkillAttribute.DAMAGE, value=1 + Percent(LevelTable(data0))),
]
# 影缚追魂锁
# thief/shadow_dancer/9ceb0c55f40f1fc0fe0fcc65c8fee3a0