character_aura 光环效果表

存储角色身上所有光环效果的详细信息

官方文档来源

表概述

character_aura 表是 Characters 数据库中最复杂也是最重要的表之一,用于持久化存储角色离线后需要保留的所有光环(Aura)效果数据。

当角色登录时,服务器会从该表读取所有光环并重新应用到角色身上;当角色下线时,所有需要持久化的光环数据会写入此表。光环来源包括:装备效果、天赋、附魔、Buff、Debuff、物品使用效果等。

通过 casterGuid 字段可以区分光环的来源——是角色自身施加的、来自队友的还是来自怪物的。该表的复合主键为 (guid, casterGuid, itemGuid, spell, effectMask),同一个角色从不同施法者获得的同一个法术光环会存储为不同记录。

表结构

字段名类型说明
guidINT UNSIGNED角色GUID(光环承载者,联合主键)
casterGuidBIGINT UNSIGNED施法者完整GUID(用于区分光环来源,联合主键)
itemGuidBIGINT UNSIGNED物品GUID(如果光环来自物品,联合主键)
spellINT UNSIGNED法术ID(光环对应的法术,联合主键)
effectMaskTINYINT UNSIGNED效果掩码(标记启用了法术的哪些effect索引,联合主键)
recalculateMaskTINYINT UNSIGNED重算掩码(标记哪些effect需要重新计算)
stackCountTINYINT UNSIGNED光环堆叠层数
amount0INT效果0的当前数值
amount1INT效果1的当前数值
amount2INT效果2的当前数值
base_amount0INT效果0的基础数值(未经修正)
base_amount1INT效果1的基础数值(未经修正)
base_amount2INT效果2的基础数值(未经修正)
maxDurationINT最大持续时间(毫秒)
remainTimeINT剩余时间(毫秒)
remainChargesTINYINT UNSIGNED剩余充能次数

核心字段说明

casterGuid 施法者来源鉴别

casterGuid 值来源典型场景
等于 guid角色自身天赋/被动技能、自身Buff
0 或 其他角色GUID其他玩家队友Buff(耐力、智力等)
宠物/NPC GUID怪物或宠物怪物Debuff、猎人宠物Buff
对应 itemGuid装备物品饰品触发效果、武器附魔触发

effectMask 和 recalculateMask

effectMask 使用位标志表示法术的哪些效果(Effect 0/1/2)处于激活状态。如值 7 (0b111) 表示三个效果全部激活,值 1 (0b001) 表示只有效果0激活。recalculateMask 标记哪些 effect 需要在下次重新计算。

amount 和 base_amount 的区别

base_amount 是光环的原始基础值,amount 是经过角色属性、天赋加成、法伤系数等修正后的实际值。每个法术最多有3个效果(effect 0/1/2),分别对应 amount0/base_amount0、amount1/base_amount1、amount2/base_amount2。

实际案例

查看角色身上的所有光环

-- 查询指定角色所有光环,含来源和剩余时间 SELECT spell, stackCount, remainTime, maxDuration, CASE WHEN casterGuid = guid THEN '自身' WHEN casterGuid = itemGuid THEN '物品' ELSE '其他来源' END AS 来源类型 FROM character_aura WHERE guid = 1 ORDER BY remainTime DESC;

查看光环的具体效果数值

-- 查看某个法术光环的详细效果,区分基础值和实际值 SELECT spell, stackCount, base_amount0 AS 基础值0, amount0 AS 实际值0, base_amount1 AS 基础值1, amount1 AS 实际值1, effectMask, remainTime FROM character_aura WHERE guid = 1 AND spell = 61316;

清除角色的特定光环(修复异常状态)

-- 先查看角色身上由NPC施加的异常Debuff光环 SELECT spell, remainTime, stackCount FROM character_aura WHERE guid = 1 AND casterGuid != guid AND maxDuration > 0; -- 确认后执行删除(角色需离线) DELETE FROM character_aura WHERE guid = 1 AND spell = 12345;

常见问题

Q1: 为什么某些光环在线时有效,但重启服务器后消失?
这是因为光环的持久化属性未设置。只有在 Spell.dbc 中设置了相关持久化标志的光环,才会在角色下线时写入 character_aura 表。如果光环没有持久化属性,重启后不会自动恢复。
Q2: casterGuid 和 guid 相同时代表什么?
表示光环是由角色自身施放的,包括被动天赋光环(如武器专精)、主动自身Buff(如法师的冰甲术)等。如果 casterGuid=0,通常表示该光环不需要关联特定施法者。
Q3: effectMask 字段为什么需要作为主键?
因为同一个法术可以有多个 effect 索引激活,并且不同 effect 组合可能需要独立存储。例如某个光环先激活 effect 0 和 1(effectMask=3),后来又激活了 effect 2(effectMask=7),两者可能被存储为不同的记录。