在传奇游戏中,玩家执行“小退”(即返回角色选择界面但不完全关闭客户端)后,默认情况下召唤的宝宝(如虎卫、月灵、狗等)会自动消失。若需实现小退后宝宝保留,需通过脚本在角色下线时保存宝宝信息,并在重新进入游戏时还原。以下为基于HERO引擎的完整解决方案。
一、核心原理
利用 @UserExit 事件捕获玩家小退行为,将当前宝宝编号、等级、血量等关键数据写入人物变量;在玩家重新登录并进入地图后,通过 @LoginCheck 或 @MapMove 触发判断,若存在保存的宝宝数据,则重新召唤。
二、脚本部署位置
所有代码需添加至 QFunction.txt 文件中。
三、保存宝宝信息(小退时触发)
[@UserExit]
; 判断是否存在宝宝
IF
CHECKBABY
ACT
; 获取宝宝类型(编号)
GETBABYINFO 0 N1
; 获取宝宝等级
GETBABYINFO 1 N2
; 保存到人物变量(持久化)
SET [HUMAN_BABY_ID]
SET [HUMAN_BABY_LEVEL]
; 清除当前宝宝(避免残留)
CLEARBABY
说明:
CHECKBABY:检测玩家是否有召唤物;
GETBABYINFO 0 返回宝宝物品编号(如虎卫为6048);
GETBABYINFO 1 返回宝宝等级;
SET [HUMAN_XXX] 将数据存入人物文件,重启后仍存在。
四、恢复宝宝(上线后触发)
在角色进入主地图时还原宝宝,通常绑定到出生点或常用地图(如比奇安全区):
[@MapMove3]
; 进入比奇城(地图3)时触发
IF
EQUAL [HUMAN_BABY_ID]
ACT
; 跳过,无保存数据
BREAK
IF
LARGE [HUMAN_BABY_ID] 0
ACT
; 重建宝宝
CREATEBABY [HUMAN_BABY_ID] [HUMAN_BABY_LEVEL]
; 清除变量(可选,防止重复召唤)
; DEL HUMAN_BABY_ID
; DEL HUMAN_BABY_LEVEL
若希望在任意地图上线都恢复,可改用 @LoginCheck:
[@LoginCheck]
IF
EQUAL [HUMAN_BABY_ID]
ACT
BREAK
ACT
DELAYCALL 3000 @RestoreBaby
[@RestoreBaby]
IF
LARGE [HUMAN_BABY_ID] 0
ACT
CREATEBABY [HUMAN_BABY_ID] [HUMAN_BABY_LEVEL]
DELAYCALL 3000 延迟3秒执行,确保角色完全加载后再召唤,避免失败。
五、支持的宝宝类型
该方法适用于所有通过 CREATEBABY 召唤的宝宝,包括:
道士召唤类:骷髅(6046)、虎卫(6048)、月灵(6050);
特殊宠物:火龙、白野猪(若服务端支持作为宝宝);
自定义召唤物(编号在Dbase!Monster.txt中定义且可被CREATEBABY调用)。
六、注意事项
CLEARBABY 必须在小退时执行,否则服务端可能残留宝宝实体,导致ID冲突;
宝宝血量、经验等动态属性无法保存,仅能还原类型与等级;
若玩家大退(关闭客户端),同样触发 @UserExit,因此本方案同时支持大小退;
多宝宝系统(如同时召唤虎卫和月灵)需扩展变量存储多个ID,逻辑更复杂;
确保M2中“允许脚本控制宝宝”选项已开启(默认开启)。
七、验证方法
召唤虎卫;
按ESC选择“返回角色”;
重新进入游戏;
观察虎卫是否自动出现。
此方案通过标准HERO指令实现,无需修改核心文件,兼容主流版本,部署后立即生效。

