AzerothCore 猎人宠物系统开发:从宠物驯服、成长系数到技能学习的完整实现 原创
猎人宠物系统的数据基础
在 AzerothCore 中,猎人宠物是一套独立于普通生物的逻辑体系。宠物的类型、成长系数、技能与驯服规则都受数据库与核心代码双重约束。理解这套系统,是开发宠物相关功能(如自定义宠物、驯服条件、宠物技能树)的前提。
宠物类型与成长系数
宠物的基础属性来自 creature_template 表,而它的成长(耐力、攻击强度随等级变化)由核心代码中按宠物家族(family)定义的成长系数决定。不同家族拥有不同的攻速、护甲与专属技能,例如猫科擅长暴击,熊则偏向坦度。
| 宠物家族 | 特性 | 代表生物 |
|---|---|---|
| 猫科 | 高攻速、暴击 | 豹、虎 |
| 熊 | 高耐力、护甲 | 熊 |
| 狼 | 攻击强度加成 | 狼、恐狼 |
| 掠食者 | 多种族混合 | 奇美拉等 |
驯服流程:从怪物到伙伴
驯服不是一个简单的状态切换,而是由核心的 Unit::HandleTamePetAttempt 逻辑驱动:检查生物是否可驯服(creature_template 中 creature_type 与驯服标记)、消耗驯服道具、对目标施加驯服引导法术,最终在成功时把目标转换为宠物实体写入角色的 character_pet 数据。
宠物数据表与存档
驯服成功后,宠物的属性、技能、名字会写入 character_pet 与 character_pet_declinedname 表。这些表字段定义了宠物 ID、槽位、出生等级、当前经验与忠诚度等关键状态。
-- 查看某角色的宠物数据
SELECT * FROM character_pet WHERE owner = 角色GUID;
宠物技能:训练点与学习机制
宠物技能通过 pet_trainer 与技能训练 NPC 学习,消耗训练点。核心会根据宠物的 pet_trainer 记录判断可学习技能,并把训练点上限映射到宠物等级与忠诚度上。开发自定义宠物技能时,需要同时维护技能 DBC 与 pet_trainer 表,才能让 NPC 正常提供训练。
宠物 AI 与战斗行为
宠物在战斗中的行为由 PetAI 类控制,包括攻击目标选择、技能使用优先级与跟随/停留/攻击三种模式的切换。玩家通过行动条指令影响宠物行为,核心在 Pet::SetReactState 与 Pet::SetCommandState 中响应这些指令。
开发实战:添加一个自定义宠物技能
-- 在 pet_trainer 中添加新技能供宠物学习
INSERT INTO pet_trainer (spell, spellcost, reqskill, reqlevel, reqtrainer)
VALUES (技能ID, 训练点消耗, 0, 宠物最低等级, 训练师NPC的creature_id);
随后在核心中为对应宠物家族注册该技能的施放逻辑,即可让宠物学会并自动使用。整个链路从数据表到核心 AI,缺一不可。
小结
猎人宠物系统是 AzerothCore 中数据与代码耦合度极高的功能之一:表结构决定了存档与学习,核心类决定了驯服与战斗。开发者若想在宠物上做二次开发,必须同时掌握 creature_template、character_pet、pet_trainer 三类数据,以及 PetAI 与驯服状态机的运行逻辑。