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
+24
View File
@@ -1,6 +1,7 @@
from collections.abc import Mapping
from typing import Any, Literal
from core.character.refs.base import SkillRef, resolve_skill
from core.abstract.character import CharacterProperty
from core.basic.skill import Skill
from core.basic.skill_effects import SkillEffectEngine, skill_effect_batch
@@ -35,6 +36,12 @@ class CharacterBase(CharacterProperty):
BindAwake: int
"""绑定觉醒等级"""
skills: list['Skill']
skills_ref_dict: dict[SkillRef, 'Skill']
"""当前角色的技能引用索引;不会共享其他角色的技能实例。"""
skills_code_dict: dict[str, 'Skill']
"""当前角色的原始 code 索引。"""
skill_ref_profession: str | None
"""技能数据来源职业范围,职业变体可复用来源职业。"""
skills_dict: dict[str, 'Skill']
skills_id_dict: dict[str, 'Skill']
skills_uuid_dict: dict[str, 'Skill']
@@ -172,6 +179,9 @@ class CharacterBase(CharacterProperty):
self.equ_options = {}
self.max_point = 0
self.skills = []
self.skills_ref_dict = {}
self.skills_code_dict = {}
self.skill_ref_profession = None
self.skills_dict = {}
self.skills_id_dict = {}
self.skills_uuid_dict = {}
@@ -368,6 +378,20 @@ class CharacterBase(CharacterProperty):
# region 技能查询
def GetSkill(self, reference: SkillRef | str) -> 'Skill | None':
"""按类型化引用查询当前角色技能,兼容旧显示名称字符串。"""
return resolve_skill(self, reference)
def GetSkillByRef(self, reference: SkillRef) -> 'Skill | None':
"""按技能身份查询;校验职业范围,缺失返回 None。"""
if not isinstance(reference, SkillRef):
raise TypeError('GetSkillByRef 必须传入 SkillRef')
return resolve_skill(self, reference)
def GetSkillByCode(self, code: str) -> 'Skill | None':
"""在当前角色中按原始 code 查询,不与显示名称隐式混用。"""
return self.skills_code_dict.get(code)
def GetSkillByName(self, name) -> 'Skill':
"""通过技能名获取技能"""
return self.skills_dict.get(name, None)