法术等级表定义了法术的等级关系和升级链。在魔兽世界中,许多法术都有多个等级,玩家可以通过学习更高等级的法术来获得更强的效果。这个表管理着这些法术之间的等级关系。
字段名 | 类型 | 描述 |
---|---|---|
first_spell_id | int unsigned | 第一级法术ID |
详细说明:指定法术链中的第一级(最低等级)法术ID。这是玩家最初学习的法术版本。
作用:
示例:
|
||
spell_id | int unsigned | 当前等级法术ID |
详细说明:指定法术链中当前等级的法术ID。这可以是第一级法术,也可以是更高等级的法术。
关系说明:
用途:
|
||
rank | tinyint unsigned | 法术等级 |
详细说明:指定法术在升级链中的等级序号。等级从1开始递增,数字越大表示法术等级越高。
取值范围:1 - 255 (tinyint unsigned的范围) 等级规律:
等级特点:
常见等级分布:
|
当玩家学习法术时,系统会:
-- 火球术的完整升级链
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;