spell_group表

概述

spell_group表是AzerothCore中定义法术分组和互斥关系的重要表格。它控制着哪些法术可以同时存在,哪些法术会相互覆盖或冲突,是法术系统中实现增益叠加规则和限制的核心机制。

表格作用

表格结构

字段名 数据类型 默认值 说明
id INT UNSIGNED 0 组ID
详细说明:法术组的唯一标识符,用于将多个法术归类到同一组。
组ID分类:
  • 1-100:基础增益组(如祝福、印记等)
  • 101-200:食物和饮料组
  • 201-300:药水和合剂组
  • 301-400:临时增益组
  • 401-500:职业特定组
  • 501+:自定义组
spell_id INT UNSIGNED 0 法术ID
详细说明:属于该组的法术ID,对应Spell.dbc或spell_template表中的法术。
常见法术类型:
  • 增益法术:各种属性提升法术
  • 食物法术:食物和饮料的效果
  • 药水法术:各种药水的效果
  • 临时法术:有时间限制的特殊效果
special_flag INT UNSIGNED 0 特殊标志
详细说明:定义该法术在组内的特殊行为和规则。
标志值:
  • 0:普通组成员,遵循标准互斥规则
  • 1:组内唯一,同组其他法术会被移除
  • 2:可与同组法术叠加
  • 4:优先级最高,会覆盖同组所有法术
  • 8:不会被同组法术覆盖

行为说明:
  • 互斥行为:同组法术只能存在一个
  • 叠加行为:同组法术可以共存
  • 优先级:高优先级法术覆盖低优先级
  • 保护机制:某些法术不会被覆盖

法术分组机制

互斥规则

同组法术的互斥行为:

常见分组类型

典型的法术分组:

使用示例

查看所有法术组

-- 查看所有法术组的分布
SELECT id as group_id, COUNT(*) as spell_count
FROM spell_group
GROUP BY id
ORDER BY id;

查看特定组的法术

-- 查看祝福组(假设组ID为1)的所有法术
SELECT spell_id, special_flag
FROM spell_group
WHERE id = 1
ORDER BY special_flag, spell_id;

添加新的法术组

-- 创建新的食物组
INSERT INTO spell_group (id, spell_id, special_flag)
VALUES 
(101, 433, 0),    -- 面包
(101, 1131, 0),   -- 牛奶  
(101, 1137, 0),   -- 治疗药水
(101, 5007, 1);   -- 法力面包(优先级最高)

设置法术互斥关系

-- 设置圣骑士祝福互斥
INSERT INTO spell_group (id, spell_id, special_flag)
VALUES 
(1, 19740, 0),  -- 力量祝福
(1, 19834, 0),  -- 智慧祝福
(1, 20217, 0),  -- 王者祝福
(1, 25898, 4);  -- 强效王者祝福(最高优先级)

特殊标志详解

标志组合使用

标志值 行为描述 应用场景
0 标准互斥 普通的同类法术
1 组内唯一 特殊的独占法术
2 允许叠加 可以共存的增益
4 最高优先级 强效版本的法术
8 不被覆盖 重要的保护性法术
6 (4+2) 高优先级且可叠加 特殊的强效增益

实际应用场景

职业增益管理

消耗品管理

临时增益控制

平衡设计原则

增益叠加控制

PVP平衡考虑

常见问题

为什么法术被意外移除?

检查以下几点:

如何设置法术叠加?

叠加设置方法:

相关表格