表概述
character_reputation 表记录了每个角色与游戏中所有阵营/势力的声望关系。魔兽世界中有上百个阵营(如暴风城、奥格瑞玛、塞纳里奥议会等),每个角色对每个阵营的声望都存储在此表中。
- 阵营声望值记录
- 声望等级判定
- 声望标记管理
复合主键为 (guid, faction)。每个角色对每个阵营只有一条记录。standing 是积累的声望值,flags 控制声望的行为标记。
表结构
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| guid | int UNSIGNED | 0 | 角色GUID(复合主键) |
| faction | smallint UNSIGNED | 0 | 阵营/势力ID(复合主键,关联FactionTemplate) |
| standing | int | 0 | 声望值(正数=正向声望,负数=负向声望) |
| flags | smallint UNSIGNED | 0 | 声望标记:1=可见,2=衰减,4=隐藏,8=任务中显示,16=战斗中显示 |
声望等级与standing值对照
| 等级 | 声望值范围 | 说明 |
|---|---|---|
| 仇恨 (Hated) | -42000 ~ -6001 | 最低声望等级 |
| 敌对 (Hostile) | -6000 ~ -3001 | 主动攻击玩家 |
| 冷漠 (Unfriendly) | -3000 ~ -1 | 不愿与玩家交易 |
| 中立 (Neutral) | 0 ~ 2999 | 基础等级 |
| 友善 (Friendly) | 3000 ~ 8999 | 提供部分折扣 |
| 尊敬 (Honored) | 9000 ~ 20999 | 可购买部分物品 |
| 崇敬 (Revered) | 21000 ~ 41999 | 完全信任 |
| 崇拜 (Exalted) | 42000+ | 最高声望等级 |
实际案例
案例1:查询指定角色的所有声望
SELECT
cr.faction, cr.standing,
CASE
WHEN cr.standing >= 42000 THEN '崇拜'
WHEN cr.standing >= 21000 THEN '崇敬'
WHEN cr.standing >= 9000 THEN '尊敬'
WHEN cr.standing >= 3000 THEN '友善'
WHEN cr.standing >= 0 THEN '中立'
WHEN cr.standing >= -3000 THEN '冷漠'
WHEN cr.standing >= -6000 THEN '敌对'
ELSE '仇恨'
END AS reputation_level,
cr.flags
FROM character_reputation cr
WHERE cr.guid = 100
ORDER BY cr.standing DESC;案例2:统计某阵营的全服声望分布
SELECT
CASE
WHEN cr.standing >= 42000 THEN '崇拜'
WHEN cr.standing >= 21000 THEN '崇敬'
WHEN cr.standing >= 9000 THEN '尊敬'
WHEN cr.standing >= 3000 THEN '友善'
WHEN cr.standing >= 0 THEN '中立'
WHEN cr.standing >= -3000 THEN '冷漠'
ELSE '敌对/仇恨'
END AS rep_level,
COUNT(*) AS player_count
FROM character_reputation cr
WHERE cr.faction = 69
GROUP BY rep_level
ORDER BY MIN(cr.standing) DESC;案例3:查找达到崇拜的声望最多的玩家
SELECT
cr.guid, c.name,
COUNT(*) AS exalted_factions
FROM character_reputation cr
JOIN characters c ON c.guid = cr.guid
WHERE cr.standing >= 42000
GROUP BY cr.guid
ORDER BY exalted_factions DESC
LIMIT 10;常见问题
Q1: standing 字段的数值范围是多少?
standing 存储的是声望值。从
-42000(仇恨上限)到理论上的无上限(最高约为43000+,即崇拜等级)。不同阵营有不同的基础值和上限规则。Q2: flags 字段的取值含义是什么?
使用位掩码:
1=在声望界面可见,2=声望会随时间衰减,4=隐藏阵营(不在UI显示),8=显示任务中获得的额外声望,16=在PVP战斗中显示阵营标识。Q3: faction 字段引用自哪个表?
faction 值引用自 World 数据库中的
FactionTemplate.dbc(客户端DBC文件)定义的阵营ID。常见的如69=暴风城,70=铁炉堡,71=达纳苏斯等。