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

This commit was merged in pull request #11.
This commit is contained in:
2026-10-13 18:19:20 +08:00
parent 927866d366
commit 66ff3ff63b
175 changed files with 14299 additions and 440 deletions
+12 -3
View File
@@ -4,6 +4,7 @@ from functools import cache
import json
import re
from typing import Any, Literal, TYPE_CHECKING
from core.character.refs.base import SkillRef, resolve_skill
from .formula import 武器冷却惩罚
from database.connect import get_redis_client
from api.core.Redis import get_redis_info
@@ -97,7 +98,15 @@ class Skill:
name: str = ''
"""技能名称"""
_lv: int = 0
level_source: str | None = None
ref: SkillRef | None = None
"""技能身份引用;职业类绑定 Ref 成员,code 由此派生。"""
@property
def code(self) -> str | None:
"""技能树原始 code;未迁移的技能返回 None,不单独维护副本。"""
return self.ref.code if self.ref is not None else None
level_source: SkillRef | str | None = None
"""共享等级的源技能;目标不独立加级,也不使用自身 maxLv 截断。"""
association_source: bool | None = None
"""共享等级技能默认仅复用等级;需要独立提供关联效果时显式开启。"""
@@ -147,7 +156,7 @@ class Skill:
associate: list[dict[str, Any] | EffectDeclaration] = []
"""关联声明;维护示例和扩展边界见 core/basic/skill_effects.py 文件顶部说明。
新规则可用 SkillEffect/CharacterEffect,与旧字典混用;目标仍使用技能名称数组。
新规则使用 SkillEffect/CharacterEffect 和 Ref 目标数组,兼容旧字典及名称字符串。
新声明 value 是实际倍率/增量/覆盖值,以下 type、data、ratio 约定仅适用于旧字典。
type 默认 '*skillDamage':*乘算、+加算、=覆盖;$*PAtkP 等作用于角色。
skills 默认 '*',表示所有伤害技能;显式列表使用技能名称,可指定被动技能。
@@ -223,7 +232,7 @@ class Skill:
if engine is not None and engine.owns(self):
engine.read_level(self)
elif self.level_source is not None:
return self.char.GetSkillByName(self.level_source).lv
return resolve_skill(self.char, self.level_source).lv
return self._lv
@lv.setter