制作脚本需准备基础环境与工具。服务端目录Mir200\Envir为脚本核心存放区,主要操作Market_Def文件夹与MerChant.txt文件。脚本编辑推荐使用Notepad++或UltraEdit,避免系统记事本导致编码错误。首先理解脚本运行框架:NPC功能脚本以文本形式存储,由游戏引擎解析执行。
脚本语法基于标签触发与命令响应。脚本文件以[@标签]开头,定义功能入口。常用主标签为[@MAIN],作为NPC对话首页。标签后使用#SAY显示对话内容,\符号表示换行。<文字/@标签>用于创建可点击按钮,点击后跳转至对应标签执行命令。命令执行块以#IF、#ACT、#ELSEACT构成。#IF检测条件,#ACT执行满足条件的操作,#ELSEACT执行不满足时的操作。
基础NPC对话脚本制作示例。在Market_Def对应地图文件夹创建文本文件,如“传送员-0.txt”。文件内容:[@MAIN] #SAY 欢迎使用传送服务。\ 请选择目的地:\ <比奇城/@传送比奇> <盟重城/@传送盟重> <退出/@exit>。按钮“比奇城”对应标签[@传送比奇],需在后续脚本实现。传送功能脚本段落:[@传送比奇] #IF #ACT MAPMOVE 0 330 330 SENDMSG 6 传送成功! BREAK。MAPMOVE命令实现地图传送,参数为地图编号与坐标。
条件检测脚本实现复杂逻辑。检测玩家等级:CHECKLEVEL 大于 35。检测物品数量:CHECKITEM 金条 1。检测行会归属:CHECKGUILDFLAG 是否 沙巴克。组合条件使用AND与OR连接。#IF CHECKLEVEL 大于 35 CHECKITEM 金条 1 #ACT 表示需同时满足等级与物品条件。满足后执行#ACT块内命令,如增加经验值CHANGEEXP + 1000000。
变量使用扩展脚本功能。个人变量P变量临时存储数据,如MOV P1 100将100存入P1。全局变量G变量全服共享,用于控制活动状态。字符变量S变量存储文本,如MOV S1 玩家姓名。调用变量格式<$STR(P1)>显示P1值。计算功能通过INC增加变量值,DEC减少变量值。
任务脚本制作包含多步骤判定。设置任务标志使用SET [XXX] 1,XXX为任务编号。检测任务进度:CHECK [XXX] 1。任务奖励发放使用GIVE命令给予物品,CHANGEEXP增加经验。示例任务链:接任务[@接受] #IF #ACT SET [屠龙任务] 1 MESSAGEBOX 任务已接受。交任务[@完成] #IF CHECK [屠龙任务] 1 CHECKITEM 屠龙刀 1 #ACT TAKE 屠龙刀 1 GIVE 奖励宝箱 1 SET [屠龙任务] 0。
商店与兑换脚本实现物品交易。购买脚本检测所需货币数量,TAKE扣除货币,GIVE给予物品。检测元宝:CHECKGAMEGOLD > 99。扣除元宝:GAMEGOLD - 100。兑换脚本使用CHECKITEMWORN检测穿戴物品,配合CHECKGOLD检测金币。多物品兑换使用#CALL命令引用外部脚本文件,保持主脚本简洁。
调试脚本处理常见错误。M2控制台报错提示行号与错误内容。常见错误类型:标签未定义导致点击无反应,检查按钮对应标签是否存在。命令参数数量错误,如GIVE命令缺少数量参数。变量使用前未初始化,调用<$STR(P9)>时P9无值。语法错误如反斜杠\后直接接汉字,应改为\ 空格后接文本。脚本调试后需重新加载NPC或重启M2使修改生效。
高级脚本实现定时活动与系统功能。通过机器人脚本AutoRunRobot.txt配置定时触发,再在RobotManage.txt执行具体脚本。定时全服公告:#AutoRun NPC MIN 10 @全服提示。对应RobotManage段落:[@全服提示] #ACT SENDMSG 0 全体注意:活动即将开始。全服奖励发放使用GMEXECUTE命令,配合查询全服人物列表实现批量操作。

