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
+10 -1
View File
@@ -9,6 +9,7 @@ from database.connect import get_redis_client
from api.core.Redis import get_redis_info
from api.utils.openapi_data import OPENAPI_CUSTOM_CN_PATH, logical_skill_detail_path
from .skill_effects import CHARACTER_ATTRIBUTES, INPUT_ATTRIBUTES
from .skill_effect_types import CharacterEffect, EffectDeclaration, SkillEffect
if TYPE_CHECKING:
from core.basic.character import Character
@@ -143,9 +144,11 @@ class Skill:
"""技能冷却倍率,直接体现在面板上,不被上限影响"""
cdRecover: float = 1
"""技能冷却恢复"""
associate: list = []
associate: list[dict[str, Any] | EffectDeclaration] = []
"""关联声明;维护示例和扩展边界见 core/basic/skill_effects.py 文件顶部说明。
新规则可用 SkillEffect/CharacterEffect,与旧字典混用;目标仍使用技能名称数组。
新声明 value 是实际倍率/增量/覆盖值,以下 type、data、ratio 约定仅适用于旧字典。
type 默认 '*skillDamage':*乘算、+加算、=覆盖;$*PAtkP 等作用于角色。
skills 默认 '*',表示所有伤害技能;显式列表使用技能名称,可指定被动技能。
exceptSkills 默认 [];weapon 默认职业武器选项;precondition() 控制前置条件。
@@ -240,6 +243,12 @@ class Skill:
weapon_type = self.char.GetWeaponType()[0]
weapon_options = self.char.武器选项
for assoc in self.associate:
if isinstance(assoc, (SkillEffect, CharacterEffect)):
engine = getattr(self.char, 'skill_effects', None)
if engine is None:
raise RuntimeError('类型化效果需要 SkillEffectEngine')
engine.collect_effect(self, assoc)
continue
type = assoc.get('type', '*skillDamage')
skills = assoc.get('skills', '*')
data = assoc.get('data', [0] * self.maxLv)