表概述
character_pet 表记录了每个角色拥有的所有宠物数据。包括猎人的野兽宠物、术士的恶魔、死亡骑士的食尸鬼、法师的水元素等战斗宠物,以及各种非战斗小宠物。
- 猎人宠物管理
- 术士恶魔记录
- 宠物属性追踪
- 宠物技能数据
主键为 id(宠物唯一标识)。owner 字段关联 characters.guid 表示宠物所属角色。PetType 字段区分不同类型的宠物。
表结构
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | int UNSIGNED | 0 | 宠物唯一ID(主键) |
| entry | int UNSIGNED | 0 | 宠物生物模板entry(关联creature_template) |
| owner | int UNSIGNED | 0 | 所属角色GUID |
| modelid | int UNSIGNED | 0 | 宠物模型ID(NULL时使用默认模型) |
| CreatedBySpell | int UNSIGNED | 0 | 召唤/创造该宠物的法术ID |
| PetType | tinyint UNSIGNED | 0 | 宠物类型(0=普通,1=猎人宠物,2=术士恶魔,3=其他) |
| level | smallint UNSIGNED | 1 | 宠物当前等级 |
| exp | int UNSIGNED | 0 | 宠物当前经验值 |
| Reactstate | tinyint UNSIGNED | 0 | 宠物反应状态(0=被动,1=防御,2=主动攻击) |
| name | varchar(21) | 'Pet' | 宠物名称 |
| renamed | tinyint UNSIGNED | 0 | 是否被重命名(0=否,1=是) |
| slot | tinyint UNSIGNED | 0 | 宠物栏位编号(0-4,对应5个宠物栏) |
| curhealth | int UNSIGNED | 1 | 宠物当前生命值 |
| curmana | int UNSIGNED | 0 | 宠物当前法力值 |
| curhappiness | int UNSIGNED | 0 | 宠物当前快乐值(猎人宠物专用,影响伤害加成) |
| savetime | int UNSIGNED | 0 | 宠物保存时间(Unix时间戳) |
| abdata | text | NULL | 宠物技能数据(序列化的技能信息) |
实际案例
案例1:查询指定角色的所有宠物
SELECT
cp.id, cp.name, cp.entry, cp.PetType,
cp.level, cp.curhealth, cp.curmana,
cp.Reactstate, cp.slot,
CASE cp.PetType
WHEN 0 THEN '普通宠物'
WHEN 1 THEN '猎人宠物'
WHEN 2 THEN '术士恶魔'
ELSE '其他'
END AS pet_type_name
FROM character_pet cp
WHERE cp.owner = 100
ORDER BY cp.slot;案例2:查询所有满级猎人宠物
SELECT
cp.id, cp.name, cp.level, cp.curhealth,
c.name AS owner_name, c.guid
FROM character_pet cp
JOIN characters c ON c.guid = cp.owner
WHERE cp.PetType = 1
AND cp.level = 80
ORDER BY cp.curhealth DESC;案例3:统计各类宠物的快乐值分布
SELECT
CASE
WHEN cp.curhappiness >= 900000 THEN '快乐'
WHEN cp.curhappiness >= 600000 THEN '满足'
WHEN cp.curhappiness >= 300000 THEN '不高兴'
ELSE '非常不高兴'
END AS happiness_state,
COUNT(*) AS pet_count
FROM character_pet cp
WHERE cp.PetType = 1
GROUP BY happiness_state
ORDER BY MIN(cp.curhappiness) DESC;常见问题
Q1: Reactstate 字段的取值含义是什么?
0=被动模式(宠物不会主动攻击),1=防御模式(主人被攻击时还击),2=主动攻击模式(宠物会主动攻击附近敌对目标)。Q2: curhappiness(快乐值)有什么作用?
快乐值仅对猎人宠物有效。快乐值越高,宠物伤害加成越大。需要定期喂食宠物维持快乐值。最大值为1043336(约100万)。
Q3: abdata 字段存储什么数据?
abdata 是序列化的宠物技能数据,包含宠物已学习的技能ID、技能等级等信息。数据以二进制/编码格式存储,需要通过服务器代码解析。