法术区域表定义了在特定区域、地图或任务状态下自动应用给玩家的法术效果。这个表用于创建区域性的增益效果、环境影响或特殊的游戏机制。
字段名 | 类型 | 属性 | 键 | 默认值 | 描述 |
---|---|---|---|---|---|
spell | int(10) unsigned | 不为空 | 主键 | 0 | 法术ID,对应Spell.dbc |
area | int(10) unsigned | 不为空 | 主键 | 0 | 区域ID,对应AreaTable.dbc |
quest_start | int(10) unsigned | 不为空 | 主键 | 0 | 开始任务ID |
quest_end | int(10) unsigned | 不为空 | 主键 | 0 | 结束任务ID |
aura_spell | int(10) unsigned | 不为空 | 主键 | 0 | 光环法术ID |
racemask | int(10) unsigned | 不为空 | 0 | 种族掩码 | |
gender | tinyint(3) unsigned | 不为空 | 2 | 性别限制 | |
autocast | tinyint(3) unsigned | 不为空 | 0 | 是否自动施放 | |
quest_start_status | int(11) | 不为空 | 64 | 开始任务状态 | |
quest_end_status | int(11) | 不为空 | 11 | 结束任务状态 |
要应用的法术ID,对应Spell.dbc文件中的法术定义。
示例值: 15007(复活疾病), 23451(战场准备), 32727(竞技场准备)
区域ID,指定法术生效的区域,对应AreaTable.dbc文件。
常见区域ID:
注意: 如果area为0,表示法术在所有区域都生效。
任务相关的条件,用于控制法术的生效时机。
使用场景:
光环法术ID,用于更复杂的条件判断。通常与其他条件组合使用。
种族掩码,限制法术只对特定种族生效。
种族掩码值:
组合使用: 可以通过相加来组合多个种族,如3(1+2)表示人类和兽人。0表示所有种族。
性别限制,控制法术只对特定性别的角色生效。
性别值:
控制法术是否自动施放。
自动施放值:
任务状态的详细控制,用于精确控制法术的生效条件。
常见状态值:
在主城中为玩家提供休息经验加成或其他增益效果。
在特定区域应用环境相关的效果,如寒冷、炎热、毒气等。
在特定任务进行期间为玩家提供特殊能力或限制。
在PvP区域为玩家应用战斗相关的增益或减益效果。
-- 在暴风城为所有玩家提供休息经验加成
INSERT INTO spell_area (spell, area, quest_start, quest_end, aura_spell, racemask, gender, autocast, quest_start_status, quest_end_status)
VALUES (15007, 1519, 0, 0, 0, 0, 2, 1, 64, 11);
-- 在特定任务期间为玩家提供飞行能力
INSERT INTO spell_area (spell, area, quest_start, quest_end, aura_spell, racemask, gender, autocast, quest_start_status, quest_end_status)
VALUES (32727, 3703, 10445, 10445, 0, 0, 2, 1, 64, 11);
-- 只对联盟种族在特定区域生效的法术
INSERT INTO spell_area (spell, area, quest_start, quest_end, aura_spell, racemask, gender, autocast, quest_start_status, quest_end_status)
VALUES (23451, 2597, 0, 0, 0, 1101, 2, 1, 64, 11); -- 1101 = 1+4+32+1024+64 (人类+矮人+牛头人+德莱尼+侏儒)
SELECT spell, area, racemask, gender, autocast
FROM spell_area
WHERE area = 1519 -- 暴风城
ORDER BY spell;
SELECT spell, area, quest_start, quest_end
FROM spell_area
WHERE quest_start > 0 OR quest_end > 0
ORDER BY quest_start, quest_end;
SELECT spell, area, racemask,
CASE
WHEN racemask & 1 THEN '人类 '
ELSE ''
END +
CASE
WHEN racemask & 2 THEN '兽人 '
ELSE ''
END +
CASE
WHEN racemask & 4 THEN '矮人 '
ELSE ''
END as affected_races
FROM spell_area
WHERE racemask > 0;
可以设置复杂的任务状态条件:
-- 玩家接受任务A但未完成任务B时生效
INSERT INTO spell_area (spell, area, quest_start, quest_end, aura_spell, racemask, gender, autocast, quest_start_status, quest_end_status)
VALUES (12345, 0, 1001, 1002, 0, 0, 2, 1, 64, 64);
使用光环法术创建更复杂的条件:
-- 当玩家有特定光环时才生效的法术
INSERT INTO spell_area (spell, area, quest_start, quest_end, aura_spell, racemask, gender, autocast, quest_start_status, quest_end_status)
VALUES (54321, 1519, 0, 0, 12345, 0, 2, 1, 64, 11);
-- 为所有主城添加相同的休息区增益
INSERT INTO spell_area (spell, area, quest_start, quest_end, aura_spell, racemask, gender, autocast, quest_start_status, quest_end_status)
VALUES
(15007, 1519, 0, 0, 0, 0, 2, 1, 64, 11), -- 暴风城
(15007, 1637, 0, 0, 0, 0, 2, 1, 64, 11), -- 奥格瑞玛
(15007, 1657, 0, 0, 0, 0, 2, 1, 64, 11), -- 达纳苏斯
(15007, 1638, 0, 0, 0, 0, 2, 1, 64, 11); -- 雷霆崖
测试法术区域配置的方法:
如果法术效果不工作,检查:
检查以下几点:
种族掩码是各个种族值的二进制相加:
-- 例如:人类(1) + 矮人(4) + 侏儒(64) = 69
-- 联盟种族:1+4+8+64+1024 = 1101
-- 部落种族:2+16+32+128+512 = 690
常用的任务状态值: