表概述

character_reputation 表记录了每个角色与游戏中所有阵营/势力的声望关系。魔兽世界中有上百个阵营(如暴风城、奥格瑞玛、塞纳里奥议会等),每个角色对每个阵营的声望都存储在此表中。

复合主键为 (guid, faction)。每个角色对每个阵营只有一条记录。standing 是积累的声望值,flags 控制声望的行为标记。

表结构

字段名类型默认值说明
guidint UNSIGNED0角色GUID(复合主键)
factionsmallint UNSIGNED0阵营/势力ID(复合主键,关联FactionTemplate)
standingint0声望值(正数=正向声望,负数=负向声望)
flagssmallint UNSIGNED0声望标记: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=达纳苏斯等。