核心传送命令与机器人脚本配置
实现该功能需依赖机器人的定时任务与地图检测命令。核心传送指令是MAPMOVE,其格式为MAPMOVE 目标地图 坐标X 坐标Y。首先,在机器人脚本(通常为Robot_def目录下的AutoRunRobot.txt和RobotManage.txt)中设置定时任务。在AutoRunRobot.txt内添加一行:
#AutoRun NPC SEC 10 @整点检测
这表示游戏服务器每10秒自动执行一次@整点检测脚本。然后在对应的RobotManage.txt中,编写时间判定逻辑。
机器人定时检测与条件触发
在RobotManage.txt中添加以下脚本,用于精确判定每晚20点整:
[@整点检测]
#IF
EQUAL $TIME 20:00
#ACT
Gmexecute 开始行会传送
BREAK
此脚本会每10秒检测一次系统时间,当时间恰好为20:00时,执行GM命令开始行会传送。这里使用Gmexecute是为了调用一个具有高权限的、可遍历地图内所有玩家的功能脚本。$TIME是系统时间变量,格式为24小时制的“HH:MM”。
遍历地图玩家与执行传送
这是最关键的一步,需要在NPC脚本文件(如Market_Def或Quest_Def目录下)中,创建一个被机器人调用的脚本。新建一个文本文件(如“群体传送-3.txt”),写入以下内容:
[@开始行会传送]
#IF
#ACT
MOV A91 0
MOV A92 0
MOV A93 0
MOV P91 0
Gmexecute 地图传送
SENDMSG 0 全体公告:已将在土城仓库的所有勇士,强制传送至远古战场!
BREAK
上面这段是初始化变量和发送公告。核心在于下面这个需要循环执行的、名为@地图传送的部分:
[@地图传送]
#IF
#ACT
INC P91 1
GetMapPlayerNumber 3 <$STR(P91)> S$人物名
#IF
SMALL P91 1000
EQUAL S$人物名
#ACT
Gmexecute 地图传送
BREAK
#IF
SMALL P91 1000
#ACT
Gmexecute 地图传送
MAPMOVE E001 20 20
BREAK
脚本逻辑解释:
1. GetMapPlayerNumber 3 <$STR(P91)> S$人物名:此命令用于获取指定地图(地图编号3,即土城仓库)中,指定索引位置(P91变量)的玩家名字,并存入S$人物名变量。参数“3”是地图编号,需在MapInfo.txt中确认土城仓库的实际编号。
2. 循环机制:通过INC P91 1每次循环将索引P91加1,然后获取该位置的玩家名。如果获取到名字(S$人物名非空),则对该玩家执行MAPMOVE E001 20 20,将其传送到目标地图(E001)的指定坐标(20,20)。循环通过Gmexecute 地图传送递归调用自身,直到索引超出范围(此处设定循环上限为1000人)或获取不到玩家名为止。
3. 目标地图:E001和坐标20 20需替换为你的实际目标地图编号和中心安全区坐标。
关键命令详解与参数设定
• GetMapPlayerNumber:此命令是遍历地图内玩家的核心。第一个参数是地图编号(在MapInfo.txt中查找,如“[3 土城仓库]”的编号就是3),第二个参数是玩家索引(从1开始),第三个参数是接收玩家名的变量。
• MAPMOVE:传送命令。参数分别为:目标地图编号、坐标X、坐标Y。坐标需确保是安全区,防止玩家落地被怪物包围。
• 循环控制:脚本通过变量P91作为计数器,SMALL P91 1000确保循环不超过1000次,避免服务器卡死。EQUAL S$人物名用于判断是否已遍历完所有玩家(当获取不到名字时,变量为空,条件成立,跳出循环)。
完整脚本部署与调试步骤
1. 确认地图编号:打开服务端Mir200\Map目录下的MapInfo.txt,找到“土城仓库”和你要传送到的目标地图(如“远古战场”),记录它们的地图编号(如[3 土城仓库]和[E001 远古战场])。
2. 修改脚本:将上述脚本中的地图编号“3”和“E001”替换为你查到的实际编号。并将MAPMOVE的坐标改为目标地图的安全区坐标(可在游戏中用@SearchMon或查看地图配置文件获取)。
3. 放置脚本文件:将编写好的“群体传送-3.txt”放入Market_Def或Quest_Def目录。
4. 配置机器人:将AutoRunRobot.txt和RobotManage.txt的修改内容更新,并重启M2Server引擎使机器人脚本生效。
5. 测试:在测试模式下,可将机器人触发时间改为临近的分钟(如EQUAL $TIME 15:30),并上号到土城仓库地图,观察时间到点后是否被准确传送。注意查看M2Server控制台有无红色报错信息。
注意事项与潜在问题
• 性能:在玩家极多(如数百人)时,循环遍历可能造成服务器瞬时卡顿。建议将机器人检测间隔从10秒改为MIN 1(每分钟),并在实际传送前30秒用SENDMSG发送全服倒计时预告。
• 地图编号:务必使用MapInfo.txt中[]内的纯数字或英文编号,而非中文地图名。
• 权限:该脚本需在QuestDiary或管理员权限下运行,确保Gmexecute命令有效。
• 变量清洁:脚本中的A91、P91等为全局变量,使用前后需初始化清零,防止与其他脚本冲突。
传奇定时定点群体传送脚本实现方法
来源:
作者:
点击:

