表概述

access_requirement表控制玩家进入特定副本或区域的准入条件。通过mapIddifficulty组合来唯一定义每条规则,支持等级限制、物品要求、任务完成和成就条件等多种准入控制方式。

该表与 instance_templateareatrigger_teleport 等表协同工作,共同构成完整的副本访问控制系统。

表结构

字段名数据类型默认值说明
mapIdMEDIUMINT UNSIGNED0地图ID,对应Map.dbc中的地图编号
difficultyTINYINT UNSIGNED0难度等级:0=普通,1=英雄
level_minTINYINT UNSIGNED0进入所需最低等级
level_maxTINYINT UNSIGNED0进入允许最高等级,0=无限制
itemMEDIUMINT UNSIGNED0进入所需的物品ID(钥匙等)
item2MEDIUMINT UNSIGNED0进入所需的第二个物品ID
quest_done_AMEDIUMINT UNSIGNED0联盟玩家需要完成的任务ID
quest_done_HMEDIUMINT UNSIGNED0部落玩家需要完成的任务ID
completed_achievementMEDIUMINT UNSIGNED0需要完成的成就ID
quest_failed_textTEXTNULL不满足条件时显示的提示文本
commentTEXTNULL备注说明字段

重要字段详解

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: 玩家无法进入副本,如何排查?

按以下步骤排查:

  1. 检查 access_requirement 表中对应 mapId 和 difficulty 的记录
  2. 确认 level_min 和 level_max 是否设置正确
  3. 检查 item/item2 字段是否配置了钥匙要求
  4. 检查 quest_done_A/quest_done_H 任务是否已完成
  5. 检查 completed_achievement 成就条件

Q: 如何移除副本的等级限制?

将 level_min 和 level_max 都设为 0:

UPDATE access_requirement SET level_min = 0, level_max = 0 WHERE mapId = [地图ID];