feat:优化职业技能关联实现
This commit was merged in pull request #11.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user