传奇小退后宝宝不消失的脚本实现方法(HERO引擎)

来源: 作者: 点击:
在传奇游戏中,玩家执行“小退”(即返回角色选择界面但不完全关闭客户端)后,默认情况下召唤的宝宝(如虎卫、月灵、狗等)会自动消失。若需实现小退后宝宝保留,需通过脚本在角色下线时保存宝宝信息,并在重新进入游戏时还原。以下为基于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指令实现,无需修改核心文件,兼容主流版本,部署后立即生效。