核心思路与检测命令
在HeroM2(Sky)引擎中,要限制宠物数量,需通过检测人物当前召唤的宝宝数量来实现。引擎提供了CHECKCALLMOB命令,用于检测指定怪物名是否已被当前人物召唤。其语法为:
CHECKCALLMOB 怪物名称
此命令可检测指定名称的宝宝是否已被召唤。返回结果为真(已召唤)或假(未召唤)。你需要将其与你的宝宝名称(如“神兽”、“骷髅”、“虎卫”)结合使用,而不是检测一个通用的数量变量。
完整脚本实现方案
以下是用于商铺宠物召唤卷轴的完整脚本范例,将其写入你的NPC脚本或QManage.txt登录脚本中。假设你的宠物怪物名为“神兽”。
方案一:在NPC对话脚本中直接限制
在商铺购买并使用道具触发的脚本段中,加入检测逻辑。
[@StdModeFuncX] ; 此处的X对应宠物召唤卷轴的StdMode值,在物品数据库中查看
#IF
CHECKCALLMOB 神兽
#ACT
MESSAGEBOX 你已经有神兽了,无法再召唤!
BREAK
#IF
#ACT
RECALLMOB 神兽 1 180
GIVE 宠物召唤卷轴 -1 ; 使用卷轴
SENDMSG 7 神兽召唤成功,持续180分钟!
BREAK
脚本解析:
1. [@StdModeFuncX]是双击使用物品时触发的标签,X需与实际物品的StdMode字段对应。
2. CHECKCALLMOB 神兽检测是否已存在名为“神兽”的宝宝。
3. 如果检测为真(已存在),则弹出提示MESSAGEBOX并BREAK中断脚本,不会执行后续的召唤命令。
4. 如果检测为假(不存在),则执行RECALLMOB召唤命令,并扣除一个卷轴。
方案二:在登录脚本中加入全局检测
在D:\MirServer\Mir200\Envir\MapQuest_def\QManage.txt中加入检测,确保下线、上线后机制依然生效。
[@Login]
#IF
CHECKCALLMOB 神兽
#ACT
RECALLMOBEX 神兽
BREAK
此脚本在玩家每次登录时运行,如果检测到已召唤“神兽”,则会尝试重新加载这个宝宝,避免因下线导致的逻辑错误。
引擎关键命令说明
• CHECKCALLMOB 怪物名:核心检测命令。检测人物当前是否已召唤了指定名称的怪物作为宝宝。返回布尔值。
• RECALLMOB 怪物名 数量 时长:召唤命令。例如RECALLMOB 神兽 1 180表示召唤1只神兽,持续180分钟。
• RECALLMOBEX 怪物名:重新召唤命令。在宝宝因地图切换等原因消失后,可用此命令尝试重新召唤。
• MESSAGEBOX 提示信息:弹出提示框告知玩家。这是HeroM2引擎命令,其他引擎可能为SENDMSG 6。
常见问题与排查
1. 检测无效:确认你的宝宝在Monster.DB数据库中的名字是否与脚本中CHECKCALLMOB后的名字完全一致(包括空格、符号)。最好直接复制数据库中的怪物名称。
2. 卷轴使用后不扣除:确保在召唤成功后,有GIVE 宠物召唤卷轴 -1这样的扣除物品命令。
3. 多类型宠物限制:如果你有“神兽”和“圣兽”两种宝宝,想各自独立限制数量,只需重复检测逻辑:
[@StdModeFuncX]
#IF
CHECKCALLMOB 神兽
#ACT
MESSAGEBOX 你已经有神兽了!
BREAK
#IF
CHECKCALLMOB 圣兽
#ACT
MESSAGEBOX 你已经有圣兽了!
BREAK
#ACT
RECALLMOB 神兽 1 180 ; 或 圣兽
GIVE 宠物召唤卷轴 -1
4. 引擎兼容性:CHECKCALLMOB是HeroM2引擎的标准命令。如果你的引擎是GOM/GEE,该命令同样有效,但部分老版本可能不支持,需使用CHECKCALLMOBEX等变体,请查阅引擎说明书。

