update
This commit is contained in:
@@ -4,7 +4,7 @@ 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
|
||||
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
|
||||
|
||||
@@ -9,7 +9,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
|
||||
from ..skill.effects import skill_effect_batch
|
||||
from ..skill import Skill
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
"""技能基础包。
|
||||
|
||||
- base.py:技能基类、主动/被动与辅助技能,以及技能数据读取。
|
||||
- effects.py:类型化效果收集、依赖解析和批量重算。
|
||||
- effect_types.py:效果声明、表达式、条件及其属性/运算枚举。
|
||||
- enums.py:技能伤害类型枚举。
|
||||
"""
|
||||
|
||||
from .base import (
|
||||
ActiveBufferSkill,
|
||||
ActiveSkill,
|
||||
BuffSkill,
|
||||
PassiveBufferSkill,
|
||||
PassiveSkill,
|
||||
Skill,
|
||||
get_data,
|
||||
characterLv,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
'Skill', 'ActiveSkill', 'PassiveSkill', 'BuffSkill',
|
||||
'ActiveBufferSkill', 'PassiveBufferSkill', 'get_data', 'characterLv',
|
||||
]
|
||||
@@ -5,12 +5,12 @@ import json
|
||||
import re
|
||||
from typing import Any, Literal, TYPE_CHECKING
|
||||
from core.character.refs.base import SkillRef, resolve_skill
|
||||
from .formula import 武器冷却惩罚
|
||||
from ..formula import 武器冷却惩罚
|
||||
from database.connect import get_redis_client
|
||||
from api.core.Redis import get_redis_info
|
||||
from api.utils.openapi_data import logical_skill_detail_path
|
||||
from .skill_effects import INPUT_ATTRIBUTES
|
||||
from .skill_effect_types import EffectDeclaration
|
||||
from .effects import INPUT_ATTRIBUTES
|
||||
from .effect_types import EffectDeclaration
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from core.basic.character import Character
|
||||
@@ -141,7 +141,7 @@ class Skill:
|
||||
|
||||
value 是实际倍率、增量或覆盖值,目标优先使用 Ref 数组。
|
||||
动态 effect 只构造声明并调用 super().effect,由引擎统一收集和应用。
|
||||
维护示例见 core/basic/skill_effects.py 文件顶部说明。
|
||||
维护示例见 core/basic/skill/effects.py 文件顶部说明。
|
||||
"""
|
||||
mode: list[str] = ['']
|
||||
currentMode: str = ''
|
||||
@@ -1,4 +1,4 @@
|
||||
"""有类型的技能关联声明;完整维护说明见 skill_effects.py 文件顶部。
|
||||
"""有类型的技能关联声明;完整维护说明见 effects.py 文件顶部。
|
||||
|
||||
表达式不可变、无副作用,并在求值前声明依赖。关联目标使用 Ref 数组,兼容旧技能名称。
|
||||
公开类型、枚举成员和字段的中文文档用于编辑器补全与悬停提示。
|
||||
@@ -13,7 +13,7 @@ from math import isfinite
|
||||
from typing import TYPE_CHECKING, Literal, cast
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .skill import Skill
|
||||
from .base import Skill
|
||||
|
||||
|
||||
class Operation(str, Enum):
|
||||
@@ -1,6 +1,6 @@
|
||||
"""技能关联计算与维护说明
|
||||
|
||||
技能关联由 `core/basic/skill_effects.py` 的 `SkillEffectEngine` 统一处理。
|
||||
技能关联由 `core/basic/skill/effects.py` 的 `SkillEffectEngine` 统一处理。
|
||||
`lv`、VP 等输入变化不再通过历史倍率乘除更新目标,而是重新解析最终状态并汇总本次关联贡献。
|
||||
|
||||
## 技能身份与引用维护
|
||||
@@ -29,11 +29,11 @@ SkillRef.name 只影响提示,不参与相等性和哈希;技能名称变更
|
||||
| 随 VP、等级或自身参数变化的关联 | `associate` 中的 `Read`、`LevelTable`、`Select`、`when` | 动态目标使用 `effect`,数值和条件使用表达式 |
|
||||
| 技能给其他技能加级 | `SkillEffect(attribute=SkillAttribute.LEVEL, operation=Operation.ADD, ...)` | value 直接填整数增量;只给已学习的目标加级 |
|
||||
| 生命之树这类共享等级 | 目标技能的 `level_source` | 指向源技能名称,不再写等级 getter/no-op setter |
|
||||
| 新增会被关联修改、并影响后续关联的参数 | 技能类默认值 + `skill_effect_types.py` 的 `SkillAttribute`、`STATE_ATTRIBUTES` | 新参数同时检查读写范围;状态属性自动属于输入属性 |
|
||||
| 新增会被关联修改、并影响后续关联的参数 | 技能类默认值 + `effect_types.py` 的 `SkillAttribute`、`STATE_ATTRIBUTES` | 新参数同时检查读写范围;状态属性自动属于输入属性 |
|
||||
| 新增外部配置输入,改变它需要重新计算关联 | 技能类、配置赋值入口 + `INPUT_ATTRIBUTES` | 例如现有 `vp`;单纯登记不提供跨技能参数读取依赖 |
|
||||
| 新增职业专用输出属性 | 职业文件内继承 `ProfessionAttribute` 定义枚举,并在目标技能设置数值默认值 | 成员紧跟中文文档字符串,IDE 可显示含义;不可通过 `Read` 读取 |
|
||||
| 新增角色属性关联 | `skill_effect_types.py` 的 `CharacterAttribute`,并核对 `character/base.py` 的 `SetStatus` | 当前仅支持对应标量字段;特殊运算需单独实现 |
|
||||
| 新增运算符、目标选择方式、跨技能非等级依赖 | `skill.py` 的公共关联入口 + `skill_effects.py` | 属于公共能力扩展,需配套单元测试 |
|
||||
| 新增角色属性关联 | `effect_types.py` 的 `CharacterAttribute`,并核对 `character/base.py` 的 `SetStatus` | 当前仅支持对应标量字段;特殊运算需单独实现 |
|
||||
| 新增运算符、目标选择方式、跨技能非等级依赖 | `base.py` 的公共关联入口 + `effects.py` | 属于公共能力扩展,需配套单元测试 |
|
||||
| 装备改变技能等级或倍率 | 原装备规则及 `character/base.py` 的公共修改方法 | 使用已有批处理方法;低层直接写入须在 `batch()` 内 |
|
||||
| 仅影响单次技能展示/输出的模式、VP、UP 变换 | 原技能 `setMode`、`vp_N`、输出计算方法 | `skillInfo()` 使用临时副本,不要误改为持久关联 |
|
||||
|
||||
@@ -41,7 +41,7 @@ SkillRef.name 只影响提示,不参与相等性和哈希;技能名称变更
|
||||
|
||||
## 声明示例和数值约定
|
||||
|
||||
关联统一使用 `skill_effect_types.py` 的不可变声明,`associate` 继续是数组,目标仍然使用技能名称数组:
|
||||
关联统一使用 `effect_types.py` 的不可变声明,`associate` 继续是数组,目标仍然使用技能名称数组:
|
||||
|
||||
```python
|
||||
associate = [
|
||||
@@ -171,13 +171,13 @@ from dataclasses import dataclass
|
||||
from functools import wraps
|
||||
from graphlib import CycleError, TopologicalSorter
|
||||
from math import prod
|
||||
from .skill_effect_types import (
|
||||
from .effect_types import (
|
||||
CharacterAttribute, CharacterEffect, EffectDeclaration, MissingTargetPolicy, Operation,
|
||||
SkillEffect, STATE_ATTRIBUTES,
|
||||
)
|
||||
|
||||
|
||||
# 状态属性定义在 skill_effect_types;技能类仍须提供相应默认值。
|
||||
# 状态属性定义在 effect_types;技能类仍须提供相应默认值。
|
||||
# 外部赋值触发重算的输入;登记在此不等于自动跟踪跨技能的该属性读取。
|
||||
INPUT_ATTRIBUTES = STATE_ATTRIBUTES | {'vp', 'up', 'comboCol', 'stage', 'currentMode'}
|
||||
# CharacterBase.SetStatus 实际支持的标量属性。
|
||||
Reference in New Issue
Block a user