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

This commit is contained in:
2026-10-13 15:57:28 +08:00
parent 15c3bff467
commit 7dc5f4cde5
20 changed files with 875 additions and 161 deletions
+18 -13
View File
@@ -8,6 +8,7 @@ from ..roleinfo import CharacterEmblemInfo, CharacterEquipInfo, CharacterOathInf
from .base import CharacterBase
from .config_view import CalcConfigView
from .effect_apply import apply_uppercase_attrs
from ..skill_effects import skill_effect_batch
@cache
@@ -60,8 +61,9 @@ class CalcEquipMixin(CharacterBase):
self.SetDetail(setInfo)
self.SetSkills(setInfo.get('skills', {}))
@skill_effect_batch
def SetSkills(self, skills: dict[str, dict]):
"""设置技能等级"""
"""批量设置基础等级及 VP/UP;等级不含关联加级,共享等级由 level_source 决定。"""
for key in skills:
skill = self.GetSkillByID(key)
if skill is not None:
@@ -69,7 +71,7 @@ class CalcEquipMixin(CharacterBase):
skill.up = skills[key].get('up', 0)
if skill.hasVP:
skill.vp = skills[key].get('vp', 0)
skill.lv += skills[key].get('lv', 0)
self.skill_effects.set_input_level(skill, skills[key].get('lv', 0))
def load_skills(self) -> None:
"""加载技能"""
@@ -436,17 +438,20 @@ class CalcEquipMixin(CharacterBase):
def calc(self, setInfo: dict[str, dict]):
config = CalcConfigView(setInfo).as_legacy_dict()
self.calc_init(config)
self.SetBaseStatus()
self.calc_jade(config.get('jades', []))
self.calc_avatar(config.get('avatar', {}))
self.calc_basic()
self.calc_sundry(config.get('sundry', {}))
self.calc_emblems()
self.calc_oath_upgrade()
suit = self.calc_suits()
self.calc_equs()
self.calc_oaths()
# 装备等外部加成作为技能关联的基础值;批次结束后按最终技能状态重建关联。
# 装备之间仍有先后依赖(如先计算套装积分),不能据此任意交换下面的调用。
with self.skill_effects.batch():
self.calc_init(config)
self.SetBaseStatus()
self.calc_jade(config.get('jades', []))
self.calc_avatar(config.get('avatar', {}))
self.calc_basic()
self.calc_sundry(config.get('sundry', {}))
self.calc_emblems()
self.calc_oath_upgrade()
suit = self.calc_suits()
self.calc_equs()
self.calc_oaths()
skillInfos = []
if self.buffer:
skillInfos = self.calc_buffer_skills()