Skip to content

属性与技能接入

饰品的属性和技能不是 EmakiAccessory 自己算的,而是注册到 EmakiAttribute 与 EmakiSkills 的对外接入点上。这两个模块是软依赖,缺失时对应的那一半自动失效,饰品栏本身照常可用。

属性接入 EmakiAttribute

EmakiAccessory 向 EmakiAttribute 注册一个贡献提供者,把饰品带来的属性作为独立来源汇入战斗快照。它不注册自定义装备槽位,也不写入玩家身上的原版属性。

上报的来源 id:

来源 id含义
emakiaccessory:accessory单件饰品自身的属性。
emakiaccessory:set饰品套装的加成。

属性值通过 EmakiAttribute 的 AttributeCatalog#itemSnapshot 读取——与装备路径同一个解析器。因此一件饰品和一顶数据相同的头盔产出完全相同的数值,父属性展开与范围伴生键(range spread companion keys)一并生效。

范围伴生键与普通键一样参与求和,否则带范围的饰品会只保留下界而丢掉浮动区间。

技能接入 EmakiSkills

EmakiAccessory 向 EmakiSkills 注册一个技能来源。饰品上的装备技能载荷由 EquipmentSkillPdcCodec 读取,与 Item / Forge / Gem / Strengthen 写入的是同一套 PDC 契约。

饰品套装 thresholds[].effects[].es_skills 里列出的技能也经由同一条路径生效。

槽位限制判据

饰品和装备一样支持 active_slot 声明。饰品侧的匹配规则:

物品的 active_slot结果
未声明或为「全部」任意饰品槽都生效。
部位 id,如 ring该部位的任意一格生效。
槽位实例 id,如 ring_1只有这一格生效。
其他值不生效。

一件物品声明了多个槽位时,每一条声明都必须被当前格满足,否则整件物品的贡献被丢弃。这与装备路径「声明的槽位不匹配就丢掉整件物品贡献」的行为一致。

饰品侧的槽位判据是独立实现的,因为 itemSnapshot 本身不做槽位过滤,而装备路径的判据是 EmakiAttribute 内部实现。饰品侧额外接受「裸部位 id」这种写法。如果装备侧的判据规则将来发生变化,饰品侧这份实现需要同步更新。

重算时机

贡献快照在饰品内容发生变化时重算:GUI 编辑、数据加载完成、reload。

重算不在提供者回调里进行。EmakiAttribute 的战斗快照收集器会在计算自己的缓存签名时调用贡献提供者,也就是每次读取战斗快照都会调用一次;把 PDC 解析放在那里等于把物品反序列化搬到战斗热路径上。

线程要求

重算必须在持有这些物品的玩家的 owner 线程执行:属性解析器会把结果写回物品 PDC 作为缓存,off-thread 执行不安全。

缺失模块时的行为

缺失的模块影响
EmakiAttribute饰品不提供属性,饰品栏与套装件数统计照常工作。
EmakiSkills饰品不提供技能。
EmakiItemunique 去重回退为原版材质判定,仍然生效;依赖 pieces[].item 的饰品套装整体不生效。
PlaceholderAPI文本中的 PAPI 占位符不再替换,原样输出。

EmakiAccessory 本身没有 PlaceholderAPI 扩展,不对外提供 %emakiaccessory_*% 占位符;它只是可选地消费 PlaceholderAPI。本模块也没有向 CoreLib 动作注册表注册任何动作。