battleground_template 表
battleground_template表定义战场的基本配置模板,包括参战人数、等级范围、出生点位置和匹配权重等核心参数。
表概述
battleground_template表是战场系统的核心配置表。每个战场(如战歌峡谷、阿拉希盆地、奥特兰克山谷等)都有一条对应的模板记录,定义了每队人数上下限、等级范围、联盟/部落出生点和匹配权重。
主键为 ID(对应BattlemasterList.dbc中的战场ID),通过Weight字段控制多个可用战场时的随机选择概率。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| ID | INT UNSIGNED | 0 | 战场模板ID,对应BattlemasterList.dbc |
| MinPlayersPerTeam | SMALLINT UNSIGNED | 0 | 每队最少玩家数 |
| MaxPlayersPerTeam | SMALLINT UNSIGNED | 0 | 每队最多玩家数 |
| MinLvl | TINYINT UNSIGNED | 0 | 进入最低等级 |
| MaxLvl | TINYINT UNSIGNED | 0 | 进入最高等级 |
| AllianceStartLoc | INT UNSIGNED | NULL | 联盟出生点(对应WorldSafeLocs.dbc) |
| AllianceStartO | FLOAT | NOT NULL | 联盟出生朝向角度 |
| HordeStartLoc | INT UNSIGNED | NULL | 部落出生点(对应WorldSafeLocs.dbc) |
| HordeStartO | FLOAT | NOT NULL | 部落出生朝向角度 |
| StartMaxDist | FLOAT | 0 | 出生点最大散布距离 |
| Weight | TINYINT UNSIGNED | 1 | 匹配权重,值越大被选中概率越高 |
| ScriptName | CHAR(64) | '' | 战场C++脚本名称 |
| Comment | CHAR(38) | NOT NULL | 战场名称注释 |
重要字段详解
ID (战场模板ID)
对应BattlemasterList.dbc中的战场类型ID。常见战场ID:
- 1 - 奥特兰克山谷 (Alterac Valley) - 40v40
- 2 - 战歌峡谷 (Warsong Gulch) - 10v10
- 3 - 阿拉希盆地 (Arathi Basin) - 15v15
- 7 - 风暴之眼 (Eye of the Storm) - 15v15
- 9 - 远古海滩 (Strand of the Ancients) - 15v15
- 30 - 征服之岛 (Isle of Conquest) - 40v40
Weight (匹配权重)
当多个战场同时可用时,Weight值决定该战场被随机选中的概率。权重越高的战场越容易被匹配到。
通常设置为 1(默认),如果希望某战场更频繁出现可以增大此值(如设为18)。
AllianceStartLoc / HordeStartLoc (出生位置)
分别定义联盟和部落玩家的出生位置ID,对应WorldSafeLocs.dbc中的数据。
AllianceStartO和HordeStartO定义玩家出生后的初始朝向(弧度制)。
实战案例
查询所有可用战场的配置:
SELECT ID, Comment, MinPlayersPerTeam, MaxPlayersPerTeam, MinLvl, MaxLvl, Weight
FROM battleground_template
ORDER BY ID;
修改战歌峡谷的最小人数为5v5:
UPDATE battleground_template
SET MinPlayersPerTeam = 5, MaxPlayersPerTeam = 10, Weight = 10
WHERE ID = 2;
添加自定义战场模板:
INSERT INTO battleground_template (ID, MinPlayersPerTeam, MaxPlayersPerTeam, MinLvl, MaxLvl, AllianceStartLoc, AllianceStartO, HordeStartLoc, HordeStartO, StartMaxDist, Weight, ScriptName, Comment)
VALUES (32, 5, 10, 10, 80, 0, 0, 0, 0, 0, 1, '', '自定义战场');
常见问题
Q: 如何关闭某个战场?
将对应战场的Weight设为0即可禁用该战场的匹配:
UPDATE battleground_template SET Weight = 0 WHERE ID = [战场ID];
Q: 如何设置战场的等级分段?
需要为每个等级段创建独立的battleground_template记录,使用不同的ID并设置对应的MinLvl和MaxLvl。通常通过DBC文件扩展实现。