access_requirement 表
access_requirement表定义了副本和区域的进入要求,包括等级、物品、任务和成就等条件。该表是副本访问控制系统的核心。
表概述
access_requirement表控制玩家进入特定副本或区域的准入条件。通过mapId和difficulty组合来唯一定义每条规则,支持等级限制、物品要求、任务完成和成就条件等多种准入控制方式。
该表与 instance_template、areatrigger_teleport 等表协同工作,共同构成完整的副本访问控制系统。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| mapId | MEDIUMINT UNSIGNED | 0 | 地图ID,对应Map.dbc中的地图编号 |
| difficulty | TINYINT UNSIGNED | 0 | 难度等级:0=普通,1=英雄 |
| level_min | TINYINT UNSIGNED | 0 | 进入所需最低等级 |
| level_max | TINYINT UNSIGNED | 0 | 进入允许最高等级,0=无限制 |
| item | MEDIUMINT UNSIGNED | 0 | 进入所需的物品ID(钥匙等) |
| item2 | MEDIUMINT UNSIGNED | 0 | 进入所需的第二个物品ID |
| quest_done_A | MEDIUMINT UNSIGNED | 0 | 联盟玩家需要完成的任务ID |
| quest_done_H | MEDIUMINT UNSIGNED | 0 | 部落玩家需要完成的任务ID |
| completed_achievement | MEDIUMINT UNSIGNED | 0 | 需要完成的成就ID |
| quest_failed_text | TEXT | NULL | 不满足条件时显示的提示文本 |
| comment | TEXT | NULL | 备注说明字段 |
重要字段详解
mapId (地图ID)
指定进入要求适用的地图编号。该值对应Map.dbc文件中的地图ID。常见值包括:
- 0 - 东部王国
- 1 - 卡利姆多
- 33 - 血色修道院
- 36 - 死亡矿井
- 249 - 奥妮克希亚的巢穴
- 309 - 祖尔格拉布
- 533 - 纳克萨玛斯
difficulty (难度等级)
定义进入规则的适用难度模式:
- 0 - 普通模式(5人普通/10人普通/25人普通)
- 1 - 英雄模式(5人英雄/10人英雄/25人英雄)
同一个mapId可以有多条记录,分别对应不同的难度等级。
quest_done_A / quest_done_H (阵营任务要求)
分别控制联盟和部落玩家需要完成的入场任务。
- quest_done_A:联盟玩家必须完成的任务ID
- quest_done_H:部落玩家必须完成的任务ID
常见任务要求:如奥妮克希亚的巢穴需要完成"龙火护符"任务链,熔火之心需要完成"熔火之心传送门"任务。
实战案例
查询卡拉赞的进入要求:
SELECT * FROM access_requirement WHERE mapId = 532;
查询所有需要等级60+的副本:
SELECT a.mapId, i.script AS instance_name, a.level_min, a.level_max
FROM access_requirement a
LEFT JOIN instance_template i ON a.mapId = i.map
WHERE a.level_min >= 60
ORDER BY a.level_min;
设置英雄难度地下城进入要求(需要声望崇敬和特定钥匙):
-- 设置地狱火城墙英雄难度要求
INSERT INTO access_requirement (mapId, difficulty, level_min, level_max, item, quest_done_A, quest_done_H, completed_achievement, quest_failed_text)
VALUES (543, 1, 70, 0, 30622, 0, 0, 0, '你必须达到70级并拥有焰铸钥匙才能进入英雄难度。');
常见问题
Q: 玩家无法进入副本,如何排查?
按以下步骤排查:
- 检查 access_requirement 表中对应 mapId 和 difficulty 的记录
- 确认 level_min 和 level_max 是否设置正确
- 检查 item/item2 字段是否配置了钥匙要求
- 检查 quest_done_A/quest_done_H 任务是否已完成
- 检查 completed_achievement 成就条件
Q: 如何移除副本的等级限制?
将 level_min 和 level_max 都设为 0:
UPDATE access_requirement SET level_min = 0, level_max = 0 WHERE mapId = [地图ID];