幻象会话
幻象(Illusion)会话是挥发能力的高级管理层,解决的核心问题是:当多个机制同时对同一玩家施加视觉效果时,如何在某个机制结束时只撤销它自己的效果,而不影响其他机制的效果。
IllusionKey
每个幻象效果都通过 IllusionKey 来标识其来源:
| 字段 | 说明 |
|---|---|
viewerId | 目标玩家的标识 |
namespace | 来源命名空间,标识是哪个机制施加的效果 |
targetId | 效果目标的标识(如实体 ID 或方块位置) |
通过这三个维度的组合,系统可以精确区分不同来源的效果,即使它们作用于同一个玩家和同一个目标。
可用操作
方块操作
putBlock(key, location, blockData) // 添加伪方块
removeBlock(key, location) // 移除伪方块
世界边界操作
applyWorldBorder(key, borderState) // 应用伪世界边界
实体标志操作
setEntityFlag(key, entity, flag, value) // 设置实体标志
清除操作
clear(key) // 清除指定来源的所有幻象效果
clearViewer(viewerId) // 清除指定玩家的所有幻象效果
clear(key)只移除与该 Key 关联的效果,其他来源的效果不受影响clearViewer(viewerId)移除该玩家身上的全部幻象效果,无论来源
使用场景
假设你有两个机制同时作用于同一个玩家:
- 区域机制:玩家进入某个区域时,让附近的怪物对该玩家发光
- 技能机制:玩家释放技能时,让目标实体对该玩家发光
两个机制各自使用不同的 namespace 创建 IllusionKey,分别调用 setEntityFlag 施加发光效果。当区域机制结束时,调用 clear(regionKey) 只会移除区域机制施加的发光效果,技能机制的发光效果不受影响。
如果不使用幻象会话而是直接调用底层的 setFlag,区域机制关闭发光时会把技能机制的发光也一起关掉 —— 这就是幻象会话要解决的问题。