faction 表
faction表(对应Faction.dbc)定义游戏中所有阵营的基本信息、声望系统和多语言名称。每个阵营通过复杂的种族掩码、职业掩码控制声望关系。
表概述
faction表是声望系统的核心数据表,数据来源于Faction.dbc文件。该表定义了所有阵营的声望基准值、种族/职业声望修正、阵营等级关系以及多语言名称/描述。
主键为 ID,支持16种语言的名称和描述字段。通过ReputationRaceMask和ReputationClassMask提供精细化的声望控制。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| ID | INT | 0 | 阵营唯一ID(主键) |
| ReputationIndex | INT | 0 | 声望界面显示索引,-1表示不显示 |
| ReputationRaceMask_1-4 | INT | 0 | 4组种族声望掩码 |
| ReputationClassMask_1-4 | INT | 0 | 4组职业声望掩码 |
| ReputationBase_1-4 | INT | 0 | 4组基础声望值 |
| ReputationFlags_1-4 | INT | 0 | 4组声望标志位 |
| ParentFactionID | INT | 0 | 父阵营ID |
| ParentFactionMod_1-2 | FLOAT | 0 | 父阵营声望修正系数(溢出比例) |
| ParentFactionCap_1-2 | INT | 0 | 父阵营声望溢出上限 |
| Name_Lang_enUS | VARCHAR(100) | NULL | 英文(美)名称 |
| Name_Lang_enGB | VARCHAR(100) | NULL | 英文(英)名称 |
| Name_Lang_koKR | VARCHAR(100) | NULL | 韩文名称 |
| Name_Lang_frFR | VARCHAR(100) | NULL | 法文名称 |
| Name_Lang_deDE | VARCHAR(100) | NULL | 德文名称 |
| Name_Lang_enCN | VARCHAR(100) | NULL | 英文(中)名称 |
| Name_Lang_zhCN | VARCHAR(100) | NULL | 简体中文名称 |
| Name_Lang_enTW | VARCHAR(100) | NULL | 英文(台)名称 |
| Name_Lang_zhTW | VARCHAR(100) | NULL | 繁体中文名称 |
| Name_Lang_esES | VARCHAR(100) | NULL | 西班牙文(西)名称 |
| Name_Lang_esMX | VARCHAR(100) | NULL | 西班牙文(墨)名称 |
| Name_Lang_ruRU | VARCHAR(100) | NULL | 俄文名称 |
| Name_Lang_ptPT | VARCHAR(100) | NULL | 葡萄牙文(葡)名称 |
| Name_Lang_ptBR | VARCHAR(100) | NULL | 葡萄牙文(巴)名称 |
| Name_Lang_itIT | VARCHAR(100) | NULL | 意大利文名称 |
| Name_Lang_Unk | VARCHAR(100) | NULL | 未知语言名称(备用) |
| Name_Lang_Mask | INT UNSIGNED | 0 | 支持语言的位掩码 |
| Description_Lang_enUS~_Unk | VARCHAR(300) | NULL | 16种语言的描述文本(同上结构) |
| Description_Lang_Mask | INT UNSIGNED | 0 | 描述语言位掩码 |
重要字段详解
ReputationRaceMask (种族声望掩码)
4组独立的种族威望掩码,控制不同种族对该阵营的初始声望值。种族掩码值:
0x01- 人类 |0x02- 兽人 |0x04- 矮人0x08- 暗夜精灵 |0x10- 亡灵 |0x20- 牛头人0x40- 侏儒 |0x80- 巨魔 |0x100- 地精0x200- 血精灵 |0x400- 德莱尼
ReputationClassMask (职业声望掩码)
4组职业声望掩码,配合种族掩码进一步精细化声望控制。如战士类=0x01,圣骑士=0x02,猎人=0x04。
ReputationBase_1-4分别对应每组掩码的基础声望值。
ParentFactionID (父阵营/声望溢出)
定义声望溢出机制。当玩家获得某阵营声望时,根据ParentFactionMod系数向父阵营传递部分声望。
- 暴风城(ID:72)的声望可能溢出到联盟(ID:469)
- 奥格瑞玛(ID:76)溢出到部落(ID:67)
实战案例
查询所有阵营的中文名称:
SELECT ID, Name_Lang_zhCN, ReputationIndex
FROM faction
WHERE Name_Lang_zhCN IS NOT NULL
ORDER BY ID;
查询暴风城(ID=72)的种族声望配置:
SELECT ReputationRaceMask_1, ReputationBase_1,
ReputationRaceMask_2, ReputationBase_2,
ParentFactionID, ParentFactionMod_1
FROM faction
WHERE ID = 72;
查询有溢出关系的阵营:
SELECT f.ID, f.Name_Lang_zhCN, f.ParentFactionID,
pf.Name_Lang_zhCN AS ParentFaction,
f.ParentFactionMod_1 AS SpilloverRate
FROM faction f
LEFT JOIN faction pf ON f.ParentFactionID = pf.ID
WHERE f.ParentFactionID > 0
ORDER BY f.ID;
常见问题
Q: 如何添加或修改阵营的中文名称?
直接更新Name_Lang_zhCN字段:
UPDATE faction SET Name_Lang_zhCN = '新名称' WHERE ID = [阵营ID];
Q: 为什么ReputationIndex为-1?
ReputationIndex = -1 表示该阵营不在玩家的声望面板中显示。这是一个内部阵营,声望变化对玩家不可见。