常见问题解答 / 2026-09-07 23:44

宠物系统使用详细

一、GM后台基础设置打开 M2 的 宠物设置。必须先检查这几项: 开启宠物系统 勾选“开启宠物系统”。 设置宠物等级上限 在“升级经验”页设置最高等级

一、GM后台基础设置

打开 M2 的 宠物设置

必须先检查这几项:

  1. 开启宠物系统

    勾选“开启宠物系统”。

  2. 设置宠物等级上限

    在“升级经验”页设置最高等级。

  3. 设置升级经验

    可以使用:

    • 原始经验值
    • 标准经验值
    • 其它倍率经验计划

    切换经验计划时会弹确认框,确认后立即写入经验表。

  4. 设置宠物捡物

    如果勾选“同步客户端内挂捡物配置”,宠物捡物会按玩家客户端内挂捡物规则判断。

    这个功能不是整张捡物表同步,而是宠物看到物品时,服务端询问客户端该物品是否允许捡取,并缓存结果。

二、宠物模板配置规则

宠物本体依赖怪物库生成。

所以宠物名称必须满足:

  • 宠物配置里的名字,要能在怪物数据库里找到同名怪物;
  • 例如宠物名叫 白虎,怪物库里也必须有 白虎
  • 怪物外观、基础属性、攻击方式等,仍然来自原始怪物系统;
  • 宠物系统只是在怪物对象上附加宠物归属、等级、经验、技能、背包、脚本控制等逻辑。

如果宠物召唤失败,优先检查:

  • 宠物系统是否开启;
  • 宠物名是否写错;
  • 怪物库里是否存在同名怪物;
  • 玩家宠物数据是否已经加载;
  • 是否超过召唤冷却。

三、宠物蛋物品设置

宠物蛋使用物品数据库的 StdMode=91StdMode=92

基本规则:

  • StdMode=91/92 的物品可以作为宠物蛋;
  • 玩家使用宠物蛋后,会触发宠物孵化;
  • 孵化成功后,宠物蛋从背包删除;
  • 系统会触发 NPC 标签 @EggToPet
  • 宠物重新变回蛋时,会触发 @PetToEgg

宠物蛋建议配置成普通可使用物品,名称可以叫:

白虎宠物蛋

宠物蛋实际孵化出的宠物名,由脚本发放时绑定。

四、常用 NPC / GM 脚本命令

1、发放宠物蛋

#ACT
GIVEGAMEPET 白虎 <$STR(S1)>
SENDMSG 6 你获得了白虎宠物蛋,物品唯一ID:<$STR(S1)>

说明:

  • 白虎 是宠物模板名,同时必须是怪物库里的怪物名;
  • 第二个参数是变量,返回宠物蛋物品 MakeIndex。

2、直接给玩家宠物

#ACT
GIVEGAMEPETEX 白虎 1 0 0 0 <$STR(S1)>
SENDMSG 6 你获得了白虎宠物,宠物序号:<$STR(S1)>

参数含义:

GIVEGAMEPETEX 宠物名 等级 经验 HP MP 返回变量

例子:

GIVEGAMEPETEX 白虎 30 0 5000 1000 <$STR(S1)>

3、召唤宠物

按序号召唤:

#ACT
RECALLGAMEPET 0

按名字召唤:

#ACT
RECALLGAMEPET 白虎

如果不传有效序号,默认尝试当前宠物或第 0 个宠物。

4、收回当前宠物

#ACT
RETAKEGAMEPET

成功后触发:

@GamePetRetake

5、删除宠物

#ACT
DELETEGAMEPET 0

说明:

  • 参数是宠物列表序号;
  • 第一个宠物是 0
  • 删除前建议脚本二次确认,避免玩家误删。

6、宠物变回蛋

#ACT
GAMEPETTOBAG 0

说明:

  • 参数是宠物列表序号;
  • 成功后背包增加宠物蛋;
  • 会触发 @PetToEgg

五、宠物等级与经验控制

设置当前召唤宠物等级

#ACT
CHANGEGAMEPETLEVEL = 30

增加等级:

#ACT
CHANGEGAMEPETLEVEL + 1

降低等级:

#ACT
CHANGEGAMEPETLEVEL - 1

设置 / 增加 / 减少经验

增加经验:

#ACT
GAMEPETCHANGEEXP + 10000

减少经验:

#ACT
GAMEPETCHANGEEXP - 10000

直接设置经验:

#ACT
GAMEPETCHANGEEXP = 50000

宠物经验满后会自动升级,并触发:

@GamePetLevelUp

六、宠物技能控制

给宠物技能

#ACT
GIVEGAMEPETMAGIC 1 烈火剑法

说明:

  • 第一个参数是技能格位置,从 1 开始;
  • 第二个参数是技能名;
  • 技能名必须存在于物品/技能索引表中。

删除指定技能

#ACT
DELGAMEPETMAGIC 烈火剑法

清空宠物技能

#ACT
CLEARGAMEPETMAGIC

获取宠物技能数量

#ACT
GETGAMEPETMAGICCOUNT <$STR(S1)>
SENDMSG 6 当前宠物技能数量:<$STR(S1)>

获取指定技能格信息

#ACT
GETGAMEPETMAGICINFO 1 <$STR(S1)> <$STR(S2)>
SENDMSG 6 技能ID:<$STR(S1)> 技能名:<$STR(S2)>

七、宠物属性控制

属性编号:

编号 属性
0 最大HP
1 最大MP
2 防御下限
3 防御上限
4 魔防下限
5 魔防上限
6 攻击下限
7 攻击上限
8 魔法下限
9 魔法上限
10 道术下限
11 道术上限
12 防毒
13 毒恢复
14 HP恢复
15 MP恢复

固定增加属性

#ACT
CHANGEGAMEPETABILITY 0 + 1000 60

说明:

CHANGEGAMEPETABILITY 属性编号 + 数值 持续秒数

上例表示当前宠物最大 HP 增加 1000,持续 60 秒。

固定减少属性

#ACT
CHANGEGAMEPETABILITY 6 - 20 30

表示攻击下限减少 20,持续 30 秒。

设置属性增量

#ACT
CHANGEGAMEPETABILITY 7 = 100 60

表示攻击上限附加值设为 100,持续 60 秒。

按当前属性百分比增加

#ACT
CHANGEGAMEPETABILITYEX 0 + 10 60

表示按当前最大 HP 的 10% 增加,持续 60 秒。

获取临时属性增量

#ACT
GETGAMEPETABILITY 0 <$STR(S1)>
SENDMSG 6 当前HP附加值:<$STR(S1)>

获取宠物实际属性值

#ACT
GETGAMEPETABILITYEX 0 <$STR(S1)>
SENDMSG 6 当前宠物最大HP:<$STR(S1)>

重新计算宠物属性

#ACT
RECALCGAMEPETABILITY

八、宠物蛋属性控制

宠物蛋属性编号:

编号 含义
1 经验
2 等级
3 HP
4 MP
5 技能1
6 技能2
7 技能3
8-17 额外扩展值

修改宠物蛋属性

当前操作物品使用 -1

#ACT
CHANGEGAMEPETEGGABIL -1 2 = 30

表示把当前宠物蛋等级改为 30。

按 MakeIndex 修改:

#ACT
CHANGEGAMEPETEGGABIL 123456 2 + 1

读取宠物蛋属性

#ACT
GETGAMEPETEGGABIL -1 2 <$STR(S1)>
SENDMSG 6 当前宠物蛋等级:<$STR(S1)>

九、宠物攻击控制

设置宠物攻击人物伤害倍率

#ACT
SETGAMEPETATTACKHUMPOWERRATE 50

表示宠物攻击人物时,伤害按 50% 计算。

临时调整宠物攻击人物伤害倍率

#ACT
SETGAMEPETATTACKHUMPOWERRATEEX + 20

获取当前倍率

#ACT
GETGAMEPETATTACKHUMPOWERRATE <$STR(S1)>
SENDMSG 6 当前宠物攻击人物伤害倍率:<$STR(S1)>%

设置攻击目标选项

#ACT
GAMEPETSETATTACKOPTION 0 1 60

参数:

GAMEPETSETATTACKOPTION 类型 值 持续秒数

说明:

  • 类型范围:0-2
  • 值范围:0-2
  • 持续秒数大于 0 时,到期自动失效

十、宠物捡物控制

设置当前宠物是否捡物

#ACT
SETGAMEPETENABLEPICK 1

常用值:

含义
0 关闭
1 开启
2 按系统/默认规则

如果 M2 勾选了“同步客户端内挂捡物配置”,宠物捡物还会受客户端内挂捡物列表限制。

十一、打开宠物界面

打开宠物主界面:

#ACT
OPENGAMEPETDLG

打开宠物背包:

#ACT
OPENGAMEPETBAG

十二、宠物界面按钮触发

客户端宠物界面预留 3 个按钮。

点击后服务端会触发:

@GamePetButton1
@GamePetButton2
@GamePetButton3

同时也会触发通用标签:

@GamePetButton

当前选中的宠物序号和宠物名会临时绑定到脚本环境,脚本执行后恢复,不污染玩家其它状态。

示例:

[@GamePetButton1]
#ACT
SENDMSG 6 你点击了宠物按钮1。

[@GamePetButton2]
#ACT
SENDMSG 6 你点击了宠物按钮2。

[@GamePetButton3]
#ACT
SENDMSG 6 你点击了宠物按钮3。

十三、系统自动触发标签

这些标签可以写在功能 NPC 中:

@EggToPet

宠物蛋孵化成功时触发。

@PetToEgg

宠物转回宠物蛋时触发。

@GamePetRecall

宠物召唤成功时触发。

@GamePetRetake

宠物收回时触发。

@GamePetLevelUp

宠物升级时触发。

@GamePetKillMon

宠物击杀怪物时触发。

@GamePetSelect

玩家在宠物界面切换选中宠物时触发。

@GamePetAttack
@GamePetMagicAttack
@GamePetStruck
@GamePetMagicStruck
@GamePetAttackDamage
@GamePetStruckDamage

宠物攻击、受击、技能攻击、伤害相关事件触发。

十四、条件判断

判断是否已召唤宠物

#IF
CHECKCALLGAMEPET
#ACT
SENDMSG 6 当前已召唤宠物。
#ELSEACT
SENDMSG 6 当前没有召唤宠物。

判断宠物等级

#IF
CHECKGAMEPETLEVEL > 30
#ACT
SENDMSG 6 当前宠物等级大于30。

也可以用:

CHECKGAMEPETLEVEL < 30
CHECKGAMEPETLEVEL = 30
CHECKGAMEPETLEVEL 30

不写比较符时,默认判断宠物等级是否大于等于该值。

判断宠物是否有指定技能

#IF
CHECKGAMEPETSKILLMAGIC 烈火剑法
#ACT
SENDMSG 6 当前宠物已学习烈火剑法。

十五、GM最小完整示例

[@main]
#SAY
<领取白虎宠物蛋/@GiveEgg>\
<直接领取白虎宠物/@GivePet>\
<召唤白虎/@RecallPet>\
<收回宠物/@RetakePet>\
<打开宠物界面/@OpenPet>\

[@GiveEgg]
#ACT
GIVEGAMEPET 白虎 <$STR(S1)>
SENDMSG 6 获得白虎宠物蛋,ID:<$STR(S1)>

[@GivePet]
#ACT
GIVEGAMEPETEX 白虎 1 0 0 0 <$STR(S1)>
SENDMSG 6 获得白虎宠物,序号:<$STR(S1)>

[@RecallPet]
#ACT
RECALLGAMEPET 白虎

[@RetakePet]
#ACT
RETAKEGAMEPET

[@OpenPet]
#ACT
OPENGAMEPETDLG

十六、GM排查顺序

如果玩家说宠物不能用,按这个顺序查:

  1. M2 宠物系统是否开启;
  2. 宠物配置里是否有这个宠物;
  3. 怪物库是否有同名怪物;
  4. 宠物蛋是否 StdMode=91/92
  5. 玩家背包是否有足够空间;
  6. 宠物是否已经在冷却;
  7. 客户端是否更新到支持宠物协议的版本;
  8. 如果宠物不捡物,检查 M2 是否开启“同步客户端内挂捡物配置”,再检查客户端内挂捡物列表是否允许该物品。

后台开系统,怪物库配宠物本体,StdMode 91/92 配宠物蛋,NPC 脚本用 GIVEGAMEPET / RECALLGAMEPET / GAMEPETTOBAG 管理宠物,界面按钮和自动标签负责扩展玩法。