传奇地图禁止携带宠物进入的脚本设置方法

来源: 作者: 点击:
在传奇服务端中限制特定地图不允许玩家带宠物进入,需通过QFunction脚本配合地图触发机制实现。核心逻辑是在玩家进入目标地图时检测是否携带宠物,若有则强制收回或阻止进入。以下提供两种常用方案:自动收回宠物和禁止传送。

确定目标地图编号

首先明确要限制的地图编号,例如“禁地”地图编号为300。该编号需与MapInfo.txt中定义一致。所有脚本均基于此编号编写。

方案一:进入地图时自动收回宠物

在MirServerMir200EnvirQFunction-0.txt中添加以下代码:

[@Map300]
IF
CHECKPET
ACT
RecallPet
SENDMSG 7 您携带的宠物已被系统收回,此地图禁止宠物进入。

说明:
[@Map300] 表示玩家进入地图300时触发;
CHECKPET 检测玩家是否拥有已召唤的宠物;
RecallPet 强制召回宠物(不删除,仅收回背包);
SENDMSG 7 在屏幕中央显示提示信息。

此方法允许玩家进入,但自动处理宠物,适用于副本、竞技场等场景。

方案二:禁止进入并传送回原地

若需完全阻止带宠玩家进入,可结合坐标判断与传送:

[@Map300]
IF
CHECKPET
ACT
MapMove 0 333 333 ;传送至安全区(地图0,坐标333,333)
SENDMSG 7 此地图禁止携带宠物,您已被传送离开。

注意:MapMove的目标坐标必须有效,否则可能导致角色卡死。建议设为出生点或主城坐标。

针对特定宠物类型限制(可选)

若仅限制某类宠物(如神兽、虎卫),需使用CHECKPETTYPE指令(部分引擎支持):

[@Map300]
IF
CHECKPETTYPE 1 ;1代表神兽,具体代码依引擎而定
ACT
RecallPet
SENDMSG 7 神兽不可进入此区域。

若引擎不支持CHECKPETTYPE,则无法区分宠物种类,只能统一处理所有宠物。

多地图批量设置

若多个地图需同样限制(如300、301、302),可分别添加对应标签:

[@Map300]
IF
CHECKPET
ACT
RecallPet
SENDMSG 7 宠物禁止进入。

[@Map301]
IF
CHECKPET
ACT
RecallPet
SENDMSG 7 宠物禁止进入。

[@Map302]
IF
CHECKPET
ACT
RecallPet
SENDMSG 7 宠物禁止进入。

或通过公共子程序简化(需引擎支持GOTO跨标签):

[@Map300]
[@Map301]
[@Map302]
IF
CHECKPET
ACT
GOTO @禁止宠物

[@禁止宠物]
ACT
RecallPet
SENDMSG 7 此区域禁止宠物进入。

验证脚本生效

部署后重启M2Server,使用带宠角色进入目标地图:
若宠物被自动收回且提示信息出现,说明脚本正常;
若无反应,检查:
QFunction-0.txt是否保存为ANSI编码;
地图编号是否与MapInfo.txt一致;
服务端引擎是否支持CHECKPET和RecallPet指令(GOM、Hero、GEE均支持)。

补充:防止宠物跟随进入

部分版本中,即使未召唤宠物,宠物仍可能随行。此时需在进入前彻底清除宠物状态。可在登录脚本或地图入口增加:

ACT
DelPet ;彻底删除宠物(慎用,会丢失)

但通常RecallPet已足够,因未召唤的宠物不会被视为“携带”。

通过上述设置,可有效控制特定地图的宠物准入,确保玩法平衡或剧情沉浸感。