一、脚本文件位置与创建
任务脚本存放于服务端的 D:\MirServer\Mir200\Envir\Market_Def 目录下,文件名必须与NPC名称一致。例如,在盟重省老兵(NPC代码“盟重老兵”)处创建任务,需在 Market_Def 目录下创建文本文件,重命名为 盟重老兵.txt。
二、基础NPC对话框架
脚本由纯文本构成,以 [@main] 标签作为NPC的默认对话。打开 盟重老兵.txt,写入以下基础对话与任务接取逻辑:
[@main]
你好,勇士。城外近来有大量<半兽人>出没,你能帮我消灭它们吗?\
我需要你带回<10个半兽人牙齿>作为证明。\ \
<接受任务/@接受任务>\
<我只是路过/@exit>
[@接受任务]
#IF
check [5] 0 // 检测变量5的值是否为0,用于判断是否首次接取
#ACT
set [5] 1 // 将变量5设为1,标记任务“已接未完成”
SendMsg 5 任务接取成功:消灭半兽人,收集10个半兽人牙齿。
break
代码解释:check [5] 0 是任务状态标志,变量5为0表示未接任务,1表示已接但未完成,2表示已完成。SendMsg 5 是发送个人提示信息。
三、杀怪与物品掉落触发
杀怪计数和物品掉落检测需在 QFunction-0.txt 脚本中编写。此文件位于 D:\MirServer\Mir200\Envir\Market_Def\QFunction-0.txt,负责处理全局事件。
1. 杀怪计数
在 QFunction-0.txt 中添加以下段落,实现杀怪进度记录:
[@KillMon]
#IF
check [5] 1 // 检测是否处于“已接未完成”状态
Random 半兽人 // 检测被杀死的怪物是否为“半兽人”
#ACT
Inc N$杀怪计数 1 // 变量N$杀怪计数自增1
SendMsg 5 进度提示:你已杀死<$STR(N$杀怪计数)>/10只半兽人。
break
2. 物品掉落与拾取检测
在同一个 QFunction-0.txt 文件中,添加物品拾取触发:
[@PickUpItem]
#IF
check [5] 1 // 检测任务状态
checkitem 半兽人牙齿 1 // 检测背包中“半兽人牙齿”是否≥1
#ACT
goto @检测任务完成 // 跳转到任务完成检测段落
break
四、任务完成与交还奖励
在 盟重老兵.txt 中添加交还任务的对话与奖励逻辑:
[@main]
你好,勇士。城外近来有大量<半兽人>出没,你能帮我消灭它们吗?\
我需要你带回<10个半兽人牙齿>作为证明。\ \
<我已经完成了,这是牙齿/@交还任务>\
<我需要更多时间/@exit>
[@交还任务]
#IF
check [5] 1 // 确认任务状态为“已接未完成”
checkitem 半兽人牙齿 10 // 检测背包是否有10个半兽人牙齿
#ACT
take 半兽人牙齿 10 // 扣除10个任务物品
set [5] 2 // 将任务状态标记为“已完成”
ChangeExp + 50000 // 给予5万经验值
give 金条 1 // 奖励1根金条
SendMsg 5 任务完成:你获得了经验和金条!
break
#ELSEACT
SendMsg 5 条件不足:你还没有收集到10个半兽人牙齿。
break
五、任务重置与调试
1. 重置任务
若任务卡住,可为GM添加重置命令。在 QFunction-0.txt 中添加:
[@重置任务]
#IF
#ACT
set [5] 0
Mov N$杀怪计数 0
SendMsg 5 任务状态已重置。
break
GM在游戏中输入 @重置任务 即可将任务恢复到初始状态。
2. 关键注意事项
• 变量范围:[5] 这类数字变量是全局唯一的,避免在不同任务中重复使用同一变量,否则会导致状态冲突。建议建立文档记录变量用途。
• 怪物与物品名称:脚本中的怪物名“半兽人”和物品名“半兽人牙齿”必须与 Monster.DB 和 StdItems.DB 数据库中的名称完全一致,包括标点符号。
• 脚本重载:修改 QFunction-0.txt 或NPC脚本后,必须在M2引擎控制台(M2Server)点击“重新加载”->“功能脚本”和“重新加载”->“NPC脚本”,修改才会生效。

