针对“每晚8点将土城仓库地图内所有玩家,强制传送至指定地图”的需求,核心是通过“定时触发+地图玩家筛选+批量传送”的脚本逻辑实现。以下是完整脚本命令写法、参数说明及适配要点,直接复制修改关键参数即可使用。
一、核心脚本整体写法(通用版)
本脚本基于传奇机器人脚本定时机制开发,无需依赖玩家操作,到点自动执行筛选与传送,适配主流传奇引擎(GOM/HERO/BLUE),需根据自身引擎调整指令后缀。
[机器人脚本]
脚本名称=土城仓库玩家定时传送
触发方式=时间触发
触发时间=20:00:00
循环执行=是
执行优先级=高
// 核心逻辑:遍历在线玩家→筛选土城仓库地图内玩家→批量传送
Start:
// 定义变量:存储玩家ID、当前地图ID
INT 玩家ID=0
INT 当前地图ID=0
// 定义目标参数:土城仓库地图ID、指定目标地图ID及坐标
INT 源地图ID=301 // 土城仓库地图ID,需替换为自身版本实际ID
INT 目标地图ID=502 // 目标地图ID,需替换为实际ID
INT 目标X坐标=120 // 目标地图安全区X坐标
INT 目标Y坐标=130 // 目标地图安全区Y坐标
// 遍历所有在线玩家(传奇引擎通用遍历指令)
玩家ID=GETONLINEFIRST() // 获取第一个在线玩家ID
WHILE 玩家ID>0
// 获取当前玩家所在地图ID
当前地图ID=GETMAP(玩家ID)
// 筛选:仅处理土城仓库地图内的玩家
IF 当前地图ID==源地图ID
// 执行强制传送(不同引擎指令差异见下文)
// GOM引擎指令
MOVEMAP 玩家ID 目标地图ID 目标X坐标 目标Y坐标
// HERO引擎替换为:MOVE 玩家ID 目标地图ID 目标X坐标 目标Y坐标
// BLUE引擎替换为:MAPMOVE 玩家ID 目标地图ID 目标X坐标 目标Y坐标
// 可选:给被传送玩家发送提示
SENDMSG 玩家ID 2 "系统:您已被传送至活动地图,请做好准备!"
ENDIF
// 获取下一个在线玩家ID,循环遍历
玩家ID=GETONLINENEXT(玩家ID)
ENDWHILE
// 脚本执行完毕
RETURN
二、关键参数与指令说明(必看修改项)
1. 基础参数替换(根据自身版本填写)
脚本中“源地图ID”“目标地图ID”及坐标为通用占位符,必须替换为自身版本的实际数据,否则会导致传送失效或玩家传送到错误位置。
- 土城仓库地图ID获取:登录游戏GM账号,进入土城仓库,输入命令“@mapid”,聊天框会显示当前地图ID,替换脚本中“源地图ID=301”的“301”。
- 目标地图ID与坐标获取:GM账号进入目标地图,输入“@mapid”获取地图ID;输入“@pos”获取当前坐标(选安全、无障碍物区域,避免玩家卡模),分别替换“目标地图ID=502”“目标X坐标=120”“目标Y坐标=130”。
2. 核心指令适配(按引擎选择)
不同传奇引擎的“强制传送”指令存在差异,必须对应替换,否则脚本执行无效果,以下是三大主流引擎的适配方案:
传奇引擎
强制传送指令格式
指令说明
GOM/GEE
MOVEMAP 玩家ID 目标地图ID X坐标 Y坐标
支持离线玩家标记,在线玩家即时传送
HERO
MOVE 玩家ID 目标地图ID X坐标 Y坐标
需确保玩家无特殊状态(如麻痹、冰冻)
BLUE
MAPMOVE 玩家ID 目标地图ID X坐标 Y坐标
可添加“0”作为第五参数,代表忽略传送冷却
3. 定时触发机制(与机器人脚本联动)
脚本头部“触发方式=时间触发”“触发时间=20:00:00”“循环执行=是”为基础设置,需与服务器机器人脚本配合实现每日执行:
1. 将上述脚本保存为“TimeTransport.txt”,放入服务器“Scripts/机器人脚本”文件夹;
2. 打开机器人脚本配置文件(通常为“RobotConfig.txt”),添加执行规则:“执行脚本=TimeTransport.txt 执行周期=每天 执行时间=20:00:00”;
3. 重启机器人服务或输入GM命令“@reloadrobot”,使配置生效。
三、常见问题与规避方法
1. 部分玩家传送失败(原因及解决)
若存在玩家未被传送的情况,优先排查以下两点:
- 玩家状态限制:处于战斗、交易、摆摊状态的玩家,部分引擎会禁止强制传送。可在脚本中添加状态判断,跳过战斗玩家并提示,示例代码:
// 新增:判断玩家是否处于战斗状态(通用指令)
INT 战斗状态=GETBATTLE(玩家ID)
IF 战斗状态==0
// 执行传送指令
MOVEMAP 玩家ID 目标地图ID 目标X坐标 目标Y坐标
ELSE
SENDMSG 玩家ID 2 "系统:战斗中无法传送,请结束战斗后等待下次传送!"
ENDIF
- 地图权限设置:目标地图若设置“禁止进入”权限,会导致传送失败。进入GM后台,在“地图管理”中找到目标地图,将“进入权限”改为“所有人”。
2. 脚本执行无响应(排查步骤)
1. 检查脚本路径:确保文件放在“机器人脚本”指定文件夹,路径无中文或特殊字符;
2. 查看日志文件:服务器“Log/RobotLog”中搜索“TimeTransport”,若提示“指令错误”,则为引擎指令未适配;若提示“地图ID无效”,则为地图ID填写错误;
3. 测试单玩家传送:用GM命令“@执行脚本 TimeTransport.txt”手动触发,观察自身是否被传送,排查坐标是否正确。
3. 避免传送拥堵(优化细节)
若土城仓库玩家数量较多,同时传送可能导致目标地图拥堵,可在脚本中添加“随机坐标偏移”,让玩家分散在安全区周围,示例代码:
// 新增:坐标随机偏移(±5范围内)
INT 随机X=目标X坐标+RAND(-5,5)
INT 随机Y=目标Y坐标+RAND(-5,5)
// 用随机坐标执行传送
MOVEMAP 玩家ID 目标地图ID 随机X 随机Y
四、完整适配示例(GOM引擎版)
假设土城仓库地图ID为301,目标活动地图ID为502,安全区坐标(120,130),完整可直接使用的脚本如下:
[机器人脚本]
脚本名称=土城仓库定时传送
触发方式=时间触发
触发时间=20:00:00
循环执行=是
执行优先级=高
Start:
INT 玩家ID=0
INT 当前地图ID=0
// 实际参数(已替换为示例数据)
INT 源地图ID=301
INT 目标地图ID=502
INT 目标X坐标=120
INT 目标Y坐标=130
INT 战斗状态=0
INT 随机X=0
INT 随机Y=0
玩家ID=GETONLINEFIRST()
WHILE 玩家ID>0
当前地图ID=GETMAP(玩家ID)
IF 当前地图ID==源地图ID
战斗状态=GETBATTLE(玩家ID)
IF 战斗状态==0
// 坐标随机偏移
随机X=目标X坐标+RAND(-5,5)
随机Y=目标Y坐标+RAND(-5,5)
// GOM引擎传送指令
MOVEMAP 玩家ID 目标地图ID 随机X 随机Y
SENDMSG 玩家ID 2 "系统:您已被传送至活动地图,活动即将开始!"
ELSE
SENDMSG 玩家ID 2 "系统:战斗中无法传送,活动地图将为您保留10分钟入口!"
ENDIF
ENDIF
玩家ID=GETONLINENEXT(玩家ID)
ENDWHILE
RETURN
使用前只需替换“源地图ID”“目标地图ID”及基础坐标,按自身引擎调整传送指令即可。若测试中遇到特殊场景问题(如多职业传送差异、跨引擎适配),可根据实际日志提示补充参数或调整判断逻辑。

