表概述

faction_template表是阵营关系系统的核心配置表,数据来源于FactionTemplate.dbc文件。每个生物通过creature_template.faction字段引用此表,决定该生物所属阵营与其他阵营的敌对/友好关系以及战斗行为标志

主键为 ID,通过Enemies/Friend字段定义最多4个敌对阵营和4个友方阵营的关系。

表结构

字段名数据类型默认值说明
IDINT0阵营模板唯一ID(主键)
FactionINT0所属基础阵营ID,对应faction.ID
FlagsINT0阵营行为标志位
FactionGroupINT0阵营组别
FriendGroupINT0友方组别掩码
EnemyGroupINT0敌方组别掩码
Enemies_1INT0敌对阵营1的ID
Enemies_2INT0敌对阵营2的ID
Enemies_3INT0敌对阵营3的ID
Enemies_4INT0敌对阵营4的ID
Friend_1INT0友方阵营1的ID
Friend_2INT0友方阵营2的ID
Friend_3INT0友方阵营3的ID
Friend_4INT0友方阵营4的ID

重要字段详解

Faction (基础阵营ID)

指向faction表(Faction.dbc)中的基础阵营ID。该字段决定了生物所属的根本阵营。

常见基础阵营值:

  • 7 - 生物(中立)
  • 14 - 怪物(敌对)
  • 35 - 友方(不可攻击)
  • 74 - 暴风城守卫
  • 76 - 奥格瑞玛守卫
Flags (阵营行为标志)

控制该阵营生物的行为特征:

  • 0x01 - 不可被攻击
  • 0x02 - PvP
  • 0x04 - 可被攻击
  • 0x08 - 敌对
  • 0x10 - 协助友方
  • 0x20 - 协助所有
Enemies / Friend (阵营关系)

定义该阵营与最多4个阵营的敌对关系和最多4个阵营的友好关系。

  • Enemies_1-4:该阵营敌对的阵营ID列表
  • Friend_1-4:该阵营友好的阵营ID列表

这些值通常引用factiontemplate_dbc自身的ID,形成阵营关系网络。

实战案例

查询某生物所属阵营的完整关系:
SELECT ct.entry, ct.name, ct.faction, ft.ID, ft.Flags,
       ft.Enemies_1, ft.Enemies_2, ft.Friend_1, ft.Friend_2
FROM creature_template ct
JOIN faction_template ft ON ct.faction = ft.ID
WHERE ct.entry = 12345;
查询所有敌对阵营模板(Flags包含敌对标志):
SELECT ID, Faction, Flags, Enemies_1, Enemies_2
FROM faction_template
WHERE Flags & 0x08 != 0
ORDER BY ID;
设置生物为完全中立(不攻击也不被攻击):
-- 查找中立模板
SELECT ID, Flags FROM faction_template WHERE Flags = 0 LIMIT 1;
-- 应用到生物
UPDATE creature_template SET faction = [中立模板ID] WHERE entry = [生物ID];

常见问题

Q: 生物攻击了不该攻击的目标,如何排查?

按以下步骤:

  1. 检查creature_template.faction对应的faction_template.Flags是否包含敌对标志
  2. 检查Enemies_1-4列表中是否包含目标的阵营
  3. 检查EnemyGroup/FriendGroup掩码定义

Q: 如何让中立NPC可被攻击?

修改对应faction_template记录,确保Flags包含可攻击标志(0x04),并将玩家阵营添加到Enemies列表中。