脚本执行由引擎内核驱动,其核心流程是“触发-检测-动作-反馈”。玩家行为(如点击NPC、拾取物品、达到等级)触发预设的脚本代码,引擎即时解析并执行命令,最终在客户端呈现相应结果。
一、脚本触发与执行机制
1. 基础触发方式
• NPC对话:玩家点击NPC,引擎读取 Merchant.txt 找到该NPC对应的脚本文件(如“新手向导-3.txt”),并执行脚本中 [@Main] 标签后的代码。
• 地图事件:进入特定地图(地图号、坐标)触发。在 MapEvent.txt 中配置,如 D001 10 10 1 0 0 2 @进入副本,表示玩家踏入D001地图(10,10)坐标时,立即执行 Q-Function.txt 中的 [@进入副本] 段落。
• 拾取/使用物品:在 Q-Function.txt 中定义,如拾取物品触发:[@PickUpItem];双击物品触发:[@StdModeFuncXX](XX为物品数据库的AniCount字段值)。
2. 定时触发(Robot脚本)
在 Mir200\Envir\Robot.txt 中配置,由引擎定时器自动执行。
• 格式:#AutoRun NPC RUNONDAY 20:00 @行会战 表示每日20:00执行 Robot_def 文件夹下的 [@行会战] 脚本。
• 间隔:RUNONMIN 5 表示每5分钟执行一次对应标签。
3. 登录/升级触发
在 QManage.txt 中预置,引擎在玩家登录或等级提升时自动调用。
• 登录触发:[@Login] 段落内的命令在角色进入游戏时立即执行,常用于发放签到、检测封号。
• 升级触发:[@PlayLevelUp] 段落内的命令在角色等级提升时执行,常用于奖励属性点。
二、脚本执行流程详解(以NPC任务为例)
1. 引擎解析步骤
1. 玩家点击“任务使者”NPC。
2. 引擎在Merchant.txt找到该NPC绑定脚本“任务使者-3.txt”。
3. 读取该文件,定位到 [@Main] 标签,开始逐行解析。
4. 遇到 #IF 条件,则检测玩家背包、等级、变量。
5. 条件满足,执行 #ACT 后语句(给予物品、传送、扣元宝)。
6. 条件不满足,执行 #ELSEACT 后语句(提示信息)。
7. 脚本执行完毕,返回结果到客户端界面。
2. 实例:每日奖励NPC
脚本文件 任务使者-3.txt 内容如下:
[@Main]
#IF
CHECKVAR HUMAN 今日奖励 = 1
#ACT
MESSAGEBOX 今日奖励已领取!
#ELSEACT
GIVE 金币 1000000
CALCVAR HUMAN 今日奖励 = 1
SAVEVAR HUMAN 今日奖励 ..\QuestDiary\变量文件.txt
MESSAGEBOX 100万金币已发放!
三、脚本加载与重载命令
脚本修改后需通知引擎重新加载,无需重启服务端。
1. 管理重载命令
在M2Server(引擎控制台)输入以下命令:
• @ReloadNpc:重载所有NPC脚本,立即生效。
• @ReloadRobot:重载机器人脚本(Robot.txt及Robot_def文件夹内脚本)。
• @ReloadManage:重载登录脚本(QManage.txt)。
• @ReloadMonItems:重载所有怪物爆率文件。
2. 变量与文件重载
• 若脚本中调用了外部变量文件(如上例的“变量文件.txt”),修改后需在游戏内或M2输入 @ReloadVar 重载变量。
• 修改 Merchant.txt(NPC配置文件)后,需重启引擎或使用部分引擎的 @ReloadMerchant 命令。
四、常见执行失败排查
• 脚本无任何反应:检查脚本文件名与Merchant.txt中配置是否一致;标签 [@Main] 是否拼写错误。
• 条件满足却不执行:检查命令格式,确认 #IF 与 #ACT 严格配对,中间无空行,变量名称与重载文件路径正确。
• 引擎报“script error”:脚本中存在不支持的命令、使用了全角标点、或变量未初始化。用Notepad++打开,开启“显示所有字符”检查。
• 定时脚本不触发:检查Robot.txt格式是否正确,时间参数是否合理,并确认 Robot_def 文件夹内对应脚本的标签是否存在。
五、高级执行控制
• 延迟执行:使用 DelayCall 命令(GOM/GEE引擎支持),如 DelayCall 5000 @奖励 表示5秒后执行 [@奖励] 段落。
• 随机执行:配合 RANDOM 命令实现概率触发,如 #IF RANDOM 5 #ACT 表示1/5的概率执行。
• 中断执行:使用 BREAK 命令可中断当前脚本段的后续执行。
脚本执行的本质是引擎对预设文本指令的逐行解析与条件响应。确保触发条件、命令语法、文件路径三者准确无误,是脚本生效的前提。

