feat:优化职业技能关联实现
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
from collections.abc import Mapping
|
||||
import sys
|
||||
from typing import Any, Literal
|
||||
|
||||
from core.abstract.character import CharacterProperty
|
||||
from core.basic.skill import Skill
|
||||
from core.basic.skill_effects import SkillEffectEngine, skill_effect_batch
|
||||
from core.basic.equipment import EquEffect, OathSuit, OathSuitSkill, Suit
|
||||
from ..formula import get_base_attributes, 获取唤醒属性
|
||||
from ..roleinfo import CharacterEmblemInfo, CharacterEquipInfo, get_key_by_value, CharacterOathInfo
|
||||
@@ -178,6 +178,7 @@ class CharacterBase(CharacterProperty):
|
||||
self.skill_names_cache = {}
|
||||
self.skills_cache = {}
|
||||
self.load_skills()
|
||||
self.skill_effects = SkillEffectEngine(self)
|
||||
|
||||
# region 角色属性设置
|
||||
|
||||
@@ -188,6 +189,7 @@ class CharacterBase(CharacterProperty):
|
||||
for index, i in enumerate([get_key_by_value(i) for i in ['力量', '体力', '智力', '精神']]):
|
||||
setattr(self, i, getattr(self, i) + temp[index] + 唤醒)
|
||||
|
||||
@skill_effect_batch
|
||||
def SetStatus(
|
||||
self,
|
||||
力量=0,
|
||||
@@ -323,6 +325,7 @@ class CharacterBase(CharacterProperty):
|
||||
value = int(value * (1 + self.jade_effect.ElementIncrease))
|
||||
self.ElementDB[element] += value
|
||||
|
||||
@skill_effect_batch
|
||||
def AddSkillLv(self, min: int, max: int, lv: int, type=-1, exceptSkills: tuple[str, ...] = ()) -> None:
|
||||
"""
|
||||
增加技能等级
|
||||
@@ -334,18 +337,21 @@ class CharacterBase(CharacterProperty):
|
||||
if (skillType == 'all' or skill.type == skillType) and skill.lv > 0 and skill.name not in exceptSkills:
|
||||
skill.lv += lv
|
||||
|
||||
@skill_effect_batch
|
||||
def SetSkillCD(self, min=1, max=100, cd=0, exclude: tuple[int, ...] = (50, 85, 100)) -> None:
|
||||
"""设置技能CD"""
|
||||
for skill in self.skills:
|
||||
if min <= skill.learnLv <= max and (skill.type == 'active' or skill.damage) and skill.learnLv not in exclude:
|
||||
skill.cdReduce *= 1 - cd
|
||||
|
||||
@skill_effect_batch
|
||||
def SetSkillCDRecover(self, min=1, max=100, cd=0, exclude: tuple[int, ...] = (50, 85, 100)) -> None:
|
||||
"""设置技能CD恢复"""
|
||||
for skill in self.skills:
|
||||
if min <= skill.learnLv <= max and (skill.type == 'active' or skill.damage) and skill.learnLv not in exclude:
|
||||
skill.cdRecover += cd
|
||||
|
||||
@skill_effect_batch
|
||||
def SetSkillRation(self, min=1, max=100, ratio=1, type=-1) -> None:
|
||||
"""设置技能倍率
|
||||
0 修改技能面板 1 不修改技能面板
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user