首先确认服务端目录结构,所有操作都在Mir200\Envir路径下完成,提前在QuestDiary文件夹内新建一个空的“数据文件”子目录,后续生成的自定义文本文件都会存放在这个路径下,避免和系统原有配置文件混放。接下来配置基础NPC注册信息,打开Envir目录下的MerChant.txt文件,在文件末尾新增一行配置,参数依次填写脚本调用路径、地图编号、X坐标、Y坐标、NPC显示名称、方向、外观代码、沙巴克归属标识、移动标识、移动间隔,示例配置为“文件生成专员 3 330 330 文件生成专员 0 5 0 0 0”,这里地图编号3对应盟重省,坐标330 330是盟重安全区中心位置,外观代码5对应仓库管理员的经典形象,配置完成后保存文件。
然后编写对应的NPC功能脚本,进入Market_Def目录,新建一个命名为“文件生成专员-3.txt”的文本文件,文件名末尾的数字必须和MerChant.txt中配置的地图编号完全对应,否则NPC点击后不会触发任何交互逻辑。脚本开头先写标准的[@main]入口段,这是玩家点击NPC后首先加载的内容,在#SAY段里列出可选择的文件生成选项,每个选项对应一个跳转标签,方便后续扩展不同的文件生成规则。
核心的文件创建逻辑使用引擎原生的CREATEFILE命令,这个命令不需要依赖任何第三方插件,GOM、GEE、HERO等主流引擎都原生支持,命令格式为CREATEFILE 目标文件相对路径,路径以QuestDiary目录为根起点,不需要填写完整的磁盘绝对路径,避免不同版本服务端目录结构不一致导致的路径报错。示例中如果要在“数据文件”子目录下生成名为“全服在线玩家名单.txt”的文件,直接填写路径参数为“..\QuestDiary\数据文件\全服在线玩家名单.txt”即可,执行该命令时如果目标路径下不存在这个文件,引擎会自动新建空白文本文件,如果文件已经存在则不会覆盖原有内容,直接跳过创建步骤。
完成文件创建后,使用AddTextListEx命令向新建的空白文件中写入自定义内容,这个命令支持三个核心参数,依次是目标文件路径、要写入的字符串内容、写入行号,行号参数设置为0时,新内容会自动追加到文件的最末尾,不需要手动计算当前文件的总行数。如果需要写入带动态变量的内容,可以直接嵌入引擎自带的系统变量,比如<
𝑈
𝑆
𝐸
𝑅
𝑁
𝐴
𝑀
𝐸
>
获取当前点击
𝑁
𝑃
𝐶
的玩家名字,
<
USERNAME>获取当前点击NPC的玩家名字,<YEAR>、<
𝑀
𝑂
𝑁
𝑇
𝐻
>
、
<
MONTH>、<DAY>获取当前系统日期,<
𝐻
𝑂
𝑈
𝑅
>
、
<
HOUR>、<MINUTE>、<$SECOND>获取当前系统时间,生成的记录会自动带上操作人和操作时间,方便后续追溯。
完整的基础脚本示例如下:
[@main]
#SAY
文件生成专员为你服务
<生成玩家签到记录文件/@create_sign_file>
<生成全服活动名单文件/@create_active_file>
<退出对话/@exit>
[@create_sign_file]
#IF
#ACT
CREATEFILE ..\QuestDiary\数据文件\玩家签到记录.txt
SendMsg 6 空白签到记录文件已成功创建
AddTextListEx ..\QuestDiary\数据文件\玩家签到记录.txt 签到记录文件生成时间:<
𝑌
𝐸
𝐴
𝑅
>
年
<
YEAR>年<MONTH>月<
𝐷
𝐴
𝑌
>
日
0
𝐴
𝑑
𝑑
𝑇
𝑒
𝑥
𝑡
𝐿
𝑖
𝑠
𝑡
𝐸
𝑥
.
.
\QuestDiary
\数
据文件
\玩
家签到记录
.
𝑡
𝑥
𝑡
操作人:
<
DAY>日0AddTextListEx..\QuestDiary\数据文件\玩家签到记录.txt操作人:<USERNAME> 0
#SAY
你指定的玩家签到记录文本文件已经生成完成,路径为Envir\QuestDiary\数据文件\玩家签到记录.txt
<返回主菜单/@main>
如果需要实现更复杂的批量写入逻辑,可以先通过变量拼接要写入的完整字符串,再统一调用写入命令,避免多次重复调用写入命令导致的文件句柄占用问题。比如要生成带玩家等级、行会信息的全服统计文件,可以先定义字符串变量S0,把多个字段用竖线分隔拼接成完整的一行记录,再一次性写入文件,后续用其他脚本读取这个文件时,直接用竖线作为分隔符拆分字段即可,数据处理效率更高。
操作完成后不需要重启整个服务器,直接打开M2控制器,点击“重新加载NPC”按钮,新配置的NPC就会在游戏内的指定坐标点刷新出来,用游戏角色走到NPC身边点击交互,选择对应的生成选项,就可以在服务端的指定路径下找到刚生成的自定义文本文件。测试过程中如果遇到点击NPC没有反应的情况,优先检查两个排查点,一是Market_Def下的脚本文件名是否和MerChant.txt中配置的NPC名称、地图编号完全匹配,二是QuestDiary下的目标子目录是否已经提前创建,引擎不会自动生成不存在的父级目录,缺少目录时文件创建命令会静默失效,不会弹出任何提示。
日常使用中,这个功能可以延伸出很多实用场景,比如玩家提交特殊道具后自动生成兑换记录文件、活动结束后自动生成获奖玩家名单文件、GM通过NPC一键生成自定义的权限名单文件,所有生成的文本文件都是标准ANSI编码,用系统自带的记事本就可以直接打开编辑,不需要额外的专用工具,后续其他脚本也可以直接调用这些文件里的内容,实现跨脚本的数据持久化存储。

