spell_ranks - 法术等级表

法术等级表定义了法术的等级关系和升级链。在魔兽世界中,许多法术都有多个等级,玩家可以通过学习更高等级的法术来获得更强的效果。这个表管理着这些法术之间的等级关系。

表结构

字段名 类型 描述
first_spell_id int unsigned 第一级法术ID
详细说明:指定法术链中的第一级(最低等级)法术ID。这是玩家最初学习的法术版本。
作用:
  • 等级起点 - 法术升级链的起始点
  • 基础版本 - 通常效果最弱但学习要求最低
  • 链式标识 - 用于识别整个法术升级链

示例:
  • 火球术等级1 - 法师的基础火球术
  • 治疗术等级1 - 牧师的基础治疗法术
  • 闪电箭等级1 - 萨满的基础攻击法术
spell_id int unsigned 当前等级法术ID
详细说明:指定法术链中当前等级的法术ID。这可以是第一级法术,也可以是更高等级的法术。
关系说明:
  • 自引用 - 如果spell_id = first_spell_id,表示这是第一级法术
  • 升级关系 - 如果spell_id ≠ first_spell_id,表示这是升级版本
  • 链式结构 - 多个记录共享同一个first_spell_id形成升级链

用途:
  • 法术替换 - 学习高级法术时自动替换低级版本
  • 效果计算 - 系统根据等级计算法术效果
  • 界面显示 - 在法术书中正确显示法术等级
rank tinyint unsigned 法术等级
详细说明:指定法术在升级链中的等级序号。等级从1开始递增,数字越大表示法术等级越高。
取值范围:1 - 255 (tinyint unsigned的范围)
等级规律:
  • 等级1 - 最基础的法术版本
  • 等级2-10 - 常见的法术等级范围
  • 等级11+ - 高级法术或特殊法术

等级特点:
  • 效果递增 - 等级越高,法术效果通常越强
  • 消耗递增 - 等级越高,法力消耗通常越多
  • 要求递增 - 等级越高,学习要求通常越高
  • 冷却时间 - 可能随等级变化

常见等级分布:
  • 基础法术 - 通常有6-12个等级
  • 高级法术 - 通常有3-6个等级
  • 特殊法术 - 可能只有1-3个等级

功能说明

主要用途

工作机制

当玩家学习法术时,系统会:

  1. 检查要学习的法术是否在此表中有记录
  2. 查找该法术所属的升级链(first_spell_id)
  3. 检查玩家是否已经拥有同一链中的其他等级法术
  4. 如果有更低等级的法术,则进行替换
  5. 更新玩家的法术书显示正确的等级信息

配置示例

火球术升级链

-- 火球术的完整升级链
INSERT INTO spell_ranks (first_spell_id, spell_id, rank) VALUES
(133, 133, 1),    -- 火球术等级1
(133, 143, 2),    -- 火球术等级2
(133, 145, 3),    -- 火球术等级3
(133, 3140, 4),   -- 火球术等级4
(133, 8400, 5),   -- 火球术等级5
(133, 8401, 6),   -- 火球术等级6
(133, 8402, 7),   -- 火球术等级7
(133, 10148, 8),  -- 火球术等级8
(133, 10149, 9),  -- 火球术等级9
(133, 10150, 10), -- 火球术等级10
(133, 10151, 11), -- 火球术等级11
(133, 25306, 12); -- 火球术等级12

治疗术升级链

-- 牧师治疗术的升级链
INSERT INTO spell_ranks (first_spell_id, spell_id, rank) VALUES
(2061, 2061, 1),  -- 治疗术等级1
(2061, 2055, 2),  -- 治疗术等级2
(2061, 6063, 3),  -- 治疗术等级3
(2061, 6064, 4),  -- 治疗术等级4
(2061, 6065, 5),  -- 治疗术等级5
(2061, 6066, 6),  -- 治疗术等级6
(2061, 10963, 7), -- 治疗术等级7
(2061, 10964, 8), -- 治疗术等级8
(2061, 10965, 9), -- 治疗术等级9
(2061, 25314, 10);-- 治疗术等级10

闪电箭升级链

-- 萨满闪电箭的升级链
INSERT INTO spell_ranks (first_spell_id, spell_id, rank) VALUES
(403, 403, 1),    -- 闪电箭等级1
(403, 529, 2),    -- 闪电箭等级2
(403, 548, 3),    -- 闪电箭等级3
(403, 915, 4),    -- 闪电箭等级4
(403, 943, 5),    -- 闪电箭等级5
(403, 6041, 6),   -- 闪电箭等级6
(403, 10391, 7),  -- 闪电箭等级7
(403, 10392, 8),  -- 闪电箭等级8
(403, 15207, 9),  -- 闪电箭等级9
(403, 15208, 10), -- 闪电箭等级10
(403, 25448, 11), -- 闪电箭等级11
(403, 25449, 12); -- 闪电箭等级12

查询示例

查看特定法术的升级链

-- 查看火球术的完整升级链
SELECT sr.*, s.SpellName
FROM spell_ranks sr
LEFT JOIN spell_template s ON sr.spell_id = s.ID
WHERE sr.first_spell_id = 133  -- 火球术的第一级ID
ORDER BY sr.rank;

查找所有法术的最高等级

SELECT 
    sr.first_spell_id,
    s1.SpellName as base_spell_name,
    MAX(sr.rank) as max_rank,
    sr2.spell_id as max_rank_spell_id,
    s2.SpellName as max_rank_spell_name
FROM spell_ranks sr
LEFT JOIN spell_template s1 ON sr.first_spell_id = s1.ID
LEFT JOIN spell_ranks sr2 ON sr.first_spell_id = sr2.first_spell_id 
    AND sr2.rank = (SELECT MAX(rank) FROM spell_ranks WHERE first_spell_id = sr.first_spell_id)
LEFT JOIN spell_template s2 ON sr2.spell_id = s2.ID
GROUP BY sr.first_spell_id
ORDER BY max_rank DESC;

统计法术等级分布

SELECT 
    MAX(rank) as max_rank,
    COUNT(DISTINCT first_spell_id) as spell_count
FROM spell_ranks
GROUP BY first_spell_id
ORDER BY max_rank DESC;

查找缺失等级的法术链

-- 查找可能有缺失等级的法术链
SELECT 
    first_spell_id,
    COUNT(*) as actual_ranks,
    MAX(rank) as max_rank,
    CASE WHEN COUNT(*) = MAX(rank) THEN '完整' ELSE '可能缺失' END as status
FROM spell_ranks
GROUP BY first_spell_id
HAVING COUNT(*) != MAX(rank)
ORDER BY first_spell_id;

注意事项

⚠️ 重要提醒