表概述

pet_spell 表存储宠物已学会的法术和技能,以及当前的激活状态。类似于 character_spell 但用于宠物系统。

核心概念:宠物(猎人宠物、术士恶魔)拥有的主动性/被动性技能都记录在此。active 字段控制法术是否被宠物自动施放。

表结构

字段名数据类型默认值说明
guidINT UNSIGNED0宠物GUID → character_pet.id
spellINT UNSIGNED0法术ID → Spell.dbc
activeTINYINT UNSIGNED0法术激活状态(0=关闭 1=激活)

重要字段详解

active - 自动施放状态

详细说明:控制宠物技能是否处于自动施放状态。状态值
  • 0 (关闭):不会自动使用,需要手动命令
  • 1 (激活/自动施放):宠物会智能地自动使用
  • 玩家可以通过宠物动作条切换此状态(右键点击技能图标)

spell - 法术ID

详细说明:对应 Spell.dbc 中的法术ID。
  • 包含宠物的所有技能:攻击技能、增益、嘲讽、特殊技能等
  • 与 guid 组成联合主键,确保同一宠物不会重复学习同一技能
  • 猎人宠物训练和术士宠物会有不同的技能集合
SQL示例:查看宠物技能 → SELECT ps.spell, ps.active, s.SpellName FROM pet_spell ps JOIN world.spell_dbc s ON ps.spell=s.Id WHERE ps.guid=宠物GUID;

SQL查询示例

-- 查看某宠物的所有技能及自动施放状态 SELECT spell, active, CASE active WHEN 1 THEN '自动' ELSE '手动' END AS auto_cast FROM pet_spell WHERE guid = 宠物GUID ORDER BY spell;
-- 给宠物添加新技能 INSERT INTO pet_spell (guid, spell, active) VALUES (宠物GUID, 法术ID, 1);
-- 启用宠物所有自动施放技能 UPDATE pet_spell SET active = 1 WHERE guid = 宠物GUID;

常见问题

Q: 宠物技能自动施放不生效怎么办?

检查 active 字段是否为1。手动设置:UPDATE pet_spell SET active=1 WHERE guid=宠物GUID AND spell=技能ID;

Q: 宠物的技能等级如何体现?

Spell.dbc 中不同等级是不同的法术ID。当宠物升级时可以学习更高等级的同名技能(不同spell ID)。