character_stats 角色属性表

存储角色的基础属性和战斗属性数据

官方文档来源

表概述

character_stats 表是 Characters 数据库中的核心表之一,用于存储每个角色的所有属性数值,包括基础属性、战斗属性和各种百分比属性。

该表与 characters 表一对一关联,每个角色只有一条属性记录。当角色升级、更换装备、学习天赋或受到各种增益效果影响时,服务器的属性重算系统会自动更新此表中的数据。

character_stats 是服务器端属性的"缓存表",由 StatsSystem 自动维护,不建议手动修改其值。该表通过 guid 作为主键与 characters 表一对一连动,guid 为角色的全局唯一标识符。

表结构

字段名类型说明
guidINT UNSIGNED角色全局唯一标识符(主键)
maxhealthINT UNSIGNED最大生命值
maxpower1INT UNSIGNED最大法力值
maxpower2INT UNSIGNED最大怒气值
maxpower3INT UNSIGNED最大能量值
maxpower4INT UNSIGNED最大符能值(死亡骑士)
maxpower5INT UNSIGNED最大符文能量
maxpower6INT UNSIGNED最大集中值(猎人)
maxpower7INT UNSIGNED最大灵力值(牧师暗影)
strengthINT UNSIGNED力量值
agilityINT UNSIGNED敏捷值
staminaINT UNSIGNED耐力值
intellectINT UNSIGNED智力值
spiritINT UNSIGNED精神值
armorINT UNSIGNED护甲值
resHolyINT UNSIGNED神圣抗性
resFireINT UNSIGNED火焰抗性
resNatureINT UNSIGNED自然抗性
resFrostINT UNSIGNED冰霜抗性
resShadowINT UNSIGNED暗影抗性
resArcaneINT UNSIGNED奥术抗性
blockPctFLOAT格挡几率(百分比)
dodgePctFLOAT闪避几率(百分比)
parryPctFLOAT招架几率(百分比)
critPctFLOAT近战暴击几率(百分比)
rangedCritPctFLOAT远程暴击几率(百分比)
spellCritPctFLOAT法术暴击几率(百分比)
attackPowerINT UNSIGNED近战攻击强度
rangedAttackPowerINT UNSIGNED远程攻击强度
spellPowerINT UNSIGNED法术强度
resilienceINT UNSIGNED韧性等级

核心字段说明

基础属性(五维)

strength(力量)agility(敏捷)stamina(耐力)intellect(智力)spirit(精神) 构成了角色的五大基础属性。

属性主要受益职业主要加成效果
力量战士、圣骑士、死亡骑士近战攻击强度(每点力量+2AP)
敏捷猎人、盗贼、猫德暴击几率、护甲值、攻击强度(猎人/盗贼)
耐力所有职业每点耐力+10最大生命值
智力法师、术士、牧师法术暴击、最大法力值
精神治疗职业非战斗状态生命/法力回复速度

Power 值说明

maxpower1~7 对应不同职业的能量类型。WotLK 3.3.5 中能量类型定义:

字段能量类型使用职业
maxpower1法力值 (Mana)法师、术士、牧师、德鲁伊、圣骑士、萨满、猎人
maxpower2怒气值 (Rage)战士、熊德
maxpower3能量值 (Energy)盗贼、猫德
maxpower4符能 (Runic Power)死亡骑士
maxpower6集中值 (Focus)猎人

抗性系统

六种魔法抗性:resHoly(神圣)、resFire(火焰)、resNature(自然)、resFrost(冰霜)、resShadow(暗影)、resArcane(奥术)。通过装备、天赋和增益获得,用于减免对应类型的魔法伤害。

实际案例

查询角色的基础属性

-- 查询指定角色的力量、敏捷、耐力、智力、精神和生命值 SELECT c.name, s.strength, s.agility, s.stamina, s.intellect, s.spirit, s.maxhealth FROM character_stats s JOIN characters c ON c.guid = s.guid WHERE c.name = '玩家名字';

查看角色完整战斗属性

-- 查询角色的所有战斗百分比和攻击数据 SELECT c.name, s.attackPower AS 近战攻强, s.spellPower AS 法术强度, CONCAT(ROUND(s.critPct, 2), '%') AS 近战暴击, CONCAT(ROUND(s.spellCritPct, 2), '%') AS 法术暴击, CONCAT(ROUND(s.dodgePct, 2), '%') AS 闪避, CONCAT(ROUND(s.parryPct, 2), '%') AS 招架, s.resilience AS 韧性 FROM character_stats s JOIN characters c ON c.guid = s.guid WHERE c.guid = 1;

找出属性异常的玩家

-- 查找生命值超过100万的异常角色(排查作弊) SELECT c.name, c.level, s.maxhealth, s.strength, s.agility FROM character_stats s JOIN characters c ON c.guid = s.guid WHERE s.maxhealth > 1000000 ORDER BY s.maxhealth DESC;

常见问题

Q1: 手动修改 character_stats 表中的属性值有效吗?
不推荐。character_stats 是系统自动维护的缓存属性表,由 StatsSystem 定期重新计算。手动修改的值会在角色登录、升级、更换装备时被服务器自动覆盖。如果需要临时修改属性,应通过 GM 命令或光环效果(aura)实现。
Q2: maxpower1~7 中哪些字段对具体角色有意义?
取决于角色的职业。例如法师只使用 maxpower1(法力值),其他 maxpower 字段值为 0;盗贼使用 maxpower3(能量值)但 maxpower1 也为 0。但某些职业会同时使用多种能量,如德鲁伊在熊形态使用怒气(maxpower2),猫形态使用能量(maxpower3),人形态使用法力(maxpower1)。
Q3: 如何重置某个角色的所有属性?
最佳方式是让角色重新登录。服务器在角色登录时会自动调用 StatsSystem 重新计算所有属性并写入 character_stats 表。如果需要强制重置,可以使用 DELETE FROM character_stats WHERE guid = [角色GUID] 然后让角色重新登录。