传奇服务端脚本编写与故障排查指南

来源: 作者: 点击:
传奇服务端脚本是控制游戏内逻辑的核心,常见于NPC对话、任务、活动、物品触发等。脚本故障直接影响游戏运行,以下针对HERO、GameOfMir引擎的常见问题进行解析。

一、脚本语法与结构基础

传奇服务端脚本通常存放在Mir200\Envir\Market_Def(NPC脚本)、\QuestDiary(自定义功能)等目录。脚本为明文文本,常见结构如下:
[@main];入口标签
#IF;条件判断
CHECKITEM金币1000000
#ACT;满足条件执行
TAKE金币1000000
GIVE屠龙1
SENDMSG0成功兑换屠龙!
#ELSESAY;条件不满足时对话
金币不足,无法兑换。

脚本流程遵循“标签→条件→执行→对话/跳转”的结构,任何一步语法错误都会导致NPC无反应或M2报错。

二、脚本不执行的常见原因

1.脚本编码错误:脚本文件必须使用ANSI编码保存。使用记事本“另存为”时,编码选择ANSI。UTF-8编码会导致脚本内中文乱码,M2无法识别,表现为NPC对话空白。
2.标签调用错误:脚本必须从[@main]标签开始。在MerChant.txt中挂载NPC时,格式为“NPC名地图坐标脚本文件名标签名”,若标签名写错(如误写为@start),NPC点击无响应。
3.命令与引擎不符:不同引擎命令有差异,切勿混淆。例如:
◦发放元宝:HERO引擎用GIVE元宝1000,GOM引擎用GAMEGOLD+1000或AddYuanBao1000。

◦检测货币:HERO用CHECKGAMEGOLD>99,GOM常用CHECKGAMEGOLD100。

4.路径与文件权限:脚本中若包含文件读写操作(如SAVEVAR、LOADVAR),需确保\QuestDiary\下的子目录(如“数据”)已手动创建,且M2Server程序有写入权限。
5.变量使用不当:个人变量(P变量)与全局变量(G变量)应用错误。个人变量需用HUMAN前缀保存,如CALCVARHUMAN充值点数+10和SAVEVARHUMAN充值点数..\QuestDiary\数据\充值.txt,忘记保存(SAVEVAR)会导致变量不记录。

三、高级功能故障排查

1.定时活动不触发:在QManage.txt(登录脚本)或QFunction-0.txt(功能脚本)中设置的定时活动,需在Robot.txt或Robot_def\目录下的机器人脚本中配置定时器。例如,在Robot.txt中加入“#AutoRunNPCSEC1@定时检测”,并在Robot_def\AutoRunRobot.txt中设定具体触发时间,如“0020*@每日活动”。
2.物品触发无效:在物品数据库(StdItems.DB)中设置触发字段“AniCount=触发编号”后,必须在QFunction-0.txt中编写对应的[@StdModeFunc触发编号]标签脚本。常见的错误是修改了数据库但未在脚本中添加该标签。
3.地图传送失效:使用MAP命令(如MAP3330330)时,需确认地图编号存在、坐标合法(不在阻挡点)。使用GuildNoticeMsg发送彩色公告时,颜色值(255、249等)需在引擎支持的范围内,否则可能导致M2卡顿。

四、调试方法与工具

•查看M2报错:脚本出错的直接反馈是M2Server控制台(Mir200目录下的M2Server.exe运行窗口)弹出红色错误提示,记录下出错脚本的文件名、行号和内容。

•使用SENDMSG调试:在脚本中关键步骤后加入SENDMSG6“调试信息”,此命令在屏幕左下角发送私人消息,用于判断脚本执行到哪一步中断。

•检查脚本嵌套:复杂的脚本常通过GOTO或#CALL跳转到其他脚本文件。需逐级检查被调用的标签是否存在,路径中的斜杠应为“\”,且文件名不含空格。

处理脚本问题的通用流程是:核对编码→检查标签→验证命令语法→确认文件路径与权限→利用M2报错和调试信息定位。保持脚本结构清晰,分段测试,是减少故障的关键。
[顶部]