一、任务脚本核心逻辑与适用引擎
本任务脚本核心逻辑:NPC接取任务→记录杀怪目标及数量→玩家击杀指定怪物累计计数→返回NPC提交任务→发放经验与物品奖励。全程依托服务端脚本指令实现,无复杂语法,适配Hero、GOM、GEE主流引擎,单机与联机场景通用。
核心指令框架:以QManage.txt全局脚本为载体,搭配变量记录杀怪进度,通过触发型指令衔接接取、杀怪、领奖三环节,无需修改客户端文件,仅需配置服务端脚本与NPC参数。
二、前期准备与文件路径定位
必备工具与文件
1. 文本编辑器:Notepad++优先,高亮显示脚本语法,避免格式错乱,记事本可替代但无语法提示。2. 服务端核心文件:Mir200\Envir\MapQuest_def\QManage.txt(全局脚本文件)、Mir200\Envir\NpcGen.txt(NPC生成文件)、Mir200\Envir\MonItems\MonGen.txt(怪物生成文件)。3. 数据对照表:怪物名称与ID对照表、物品ID对照表,确保脚本中名称/ID与服务端数据库一致。
文件路径核心要点
QManage.txt为脚本核心存放文件,所有任务逻辑指令均写入此处;NpcGen.txt用于设置任务NPC的位置、名称及对话触发;MonGen.txt确认目标怪物刷新地图与频率,确保玩家可正常击杀。修改前备份对应文件,避免误操作导致其他功能异常。
三、完整脚本编写(示例:新手杀怪领奖励任务)
示例设定
NPC名称:新手向导(位于比奇省安全区),任务目标:击杀10只稻草人,任务奖励:1000点经验、5瓶小红药,任务可重复接取(也可设置为一次性,脚本内可调整)。
第一步:写入任务接取逻辑(添加至QManage.txt末尾)
//新手杀怪任务-接取逻辑
(@AcceptTask1)
#IF
CheckTaskNotDone 1 //判断任务是否未完成(1为任务编号,可自定义)
CheckLevel 1 10 //限制1-10级玩家接取,可删除取消等级限制
#ACT
SetTask 1 1 //设置任务状态为已接取(1=任务编号,1=已接取状态)
SetVariable KillCount 0 //初始化杀怪计数变量为0
SENDMSG 7 任务接取成功!前往比奇野外击杀10只稻草人,完成后返回找我领奖。
SENDMSG 7 杀怪进度可通过@查看任务指令查询。
#ELSEACT
SENDMSG 7 你已接取该任务,快去击杀稻草人吧!
Return
第二步:写入杀怪计数逻辑(接上面代码继续添加)
//新手杀怪任务-杀怪计数逻辑
(@KillMonster1)
#IF
CheckTask 1 1 //判断任务状态为已接取
CheckVariable KillCount < 10 //判断杀怪数量未达标
#ACT
IncVariable KillCount 1 //杀怪计数+1
SENDMSG 7 已击杀稻草人{KillCount}/10只,继续加油! //实时提示进度
#IF
CheckVariable KillCount = 10 //判断杀怪数量达标
#ACT
SetTask 1 2 //设置任务状态为已完成
SENDMSG 7 稻草人击杀任务已完成!返回比奇安全区找新手向导领取奖励。
Return
第三步:写入任务领奖逻辑(接上面代码继续添加)
//新手杀怪任务-领奖逻辑
(@GetReward1)
#IF
CheckTask 1 2 //判断任务状态为已完成
#ACT
GiveExp 1000 //发放1000点经验
GiveItem 小红药 5 //发放5瓶小红药,物品名称需与ID表一致
SetTask 1 0 //重置任务状态为未接取(可重复接取,设为3则为一次性)
ClearVariable KillCount //清空杀怪计数变量
SENDMSG 7 任务奖励已发放!感谢你的参与,可再次接取任务积累资源。
#ELSEACT
SENDMSG 7 你尚未完成任务,无法领取奖励!
Return
第四步:添加任务查询指令(接上面代码继续添加)
//新手杀怪任务-查询进度指令
(@查看任务)
#IF
CheckTask 1 1 //任务已接取未完成
#ACT
SENDMSG 7 当前任务:击杀稻草人{KillCount}/10只,完成后找新手向导领奖。
#ELSEIF
CheckTask 1 2 //任务已完成未领奖
#ACT
SENDMSG 7 当前任务:已完成击杀目标,快去比奇安全区领取奖励!
#ELSEACT
SENDMSG 7 你暂无未完成任务,可找新手向导接取新手杀怪任务。
Return
四、NPC配置与怪物触发设置
第一步:配置任务NPC(修改NpcGen.txt)
打开NpcGen.txt,添加以下内容(按格式填写,参数用空格分隔):
新手向导 3 330 330 0 0 0 0 //参数依次为:NPC名称、地图编号(3=比奇省)、X坐标、Y坐标、朝向、状态、脚本编号
找到该NPC条目,在脚本触发栏添加对话逻辑,使玩家点击NPC可接取、领取任务,示例:
[@新手向导]
#SAY
欢迎来到传奇世界!我这里有个新手任务,完成可获得经验和药水奖励。\
1. 接取任务(击杀10只稻草人)\
2. 领取奖励(任务完成后点击)\
3. 查看任务进度\
#ACT
GOTO @任务选项
[@任务选项]
#SAY
请选择你要进行的操作:\
<A href="=@AcceptTask1">接取任务</A>\
<A href="=@GetReward1">领取奖励</A>\
<A href="=@查看任务">查看进度</A>
第二步:设置怪物触发脚本(修改怪物脚本文件)
打开Mir200\Envir\MonItems文件夹,找到对应怪物的脚本文件(如稻草人脚本为“稻草人.txt”,无则新建),添加以下内容,使击杀怪物触发计数逻辑:
[@怪物死亡]
#IF
CheckTask 1 1 //判断玩家已接取任务
#ACT
GOTO @KillMonster1 //触发杀怪计数脚本
Return
提示:若为GOM/GEE引擎,部分怪物脚本需在M2引擎控制器中关联,确保死亡事件可触发自定义脚本。
五、脚本参数修改与适配调整
基础参数修改(通用适配)
1. 任务编号与名称:将脚本中“1”(任务编号)改为其他数字,可区分多个任务,避免冲突;修改NPC名称、任务目标怪物名称,适配不同任务需求。2. 杀怪数量与奖励:调整“CheckVariable KillCount < 10”中的“10”为目标数量;修改“GiveExp 1000”“GiveItem 小红药 5”,调整经验值与物品奖励。3. 接取限制:删除“CheckLevel 1 10”可取消等级限制;将“SetTask 1 0”改为“SetTask 1 3”,任务变为一次性,无法重复接取。
引擎适配调整
1. Hero引擎:无需额外配置,脚本写入QManage.txt后重启服务端即可生效,支持所有指令。2. GOM/GEE引擎:需在M2引擎控制器“选项-脚本设置”中勾选“允许自定义任务脚本”,部分指令需替换为引擎专属指令(如GiveExp替换为AddExp)。3. 单机架设:无需调整网络参数,直接按步骤配置,重启服务端后登录测试即可。
六、测试调试与常见问题解决
脚本测试步骤
1. 保存所有修改文件,重启服务端所有组件(引擎、网关、数据库),确保脚本加载生效。2. 登录游戏,找到新手向导NPC,测试接取任务功能,确认提示信息正常显示。3. 前往对应地图击杀目标怪物,验证杀怪计数是否实时更新,达标后是否提示任务完成。4. 返回NPC处领取奖励,检查经验与物品是否正常发放,任务状态是否重置。
常见问题排查
1. 接取任务无响应:脚本指令语法错误(如遗漏#IF、#ACT),检查QManage.txt格式,确保指令书写正确;NPC脚本未关联任务指令,重新配置NpcGen.txt中的对话触发。2. 杀怪不计数:怪物脚本未添加死亡触发逻辑,或怪物名称/ID与脚本不一致,核对怪物对照表并补充触发脚本。3. 奖励无法领取:任务状态未正确切换,检查“SetTask 1 2”是否执行,可在脚本中添加调试提示,排查触发条件。4. 脚本冲突:多个任务使用同一编号,修改任务编号为唯一数字,避免指令冲突;关闭其他冗余任务脚本,单独测试目标脚本。
七、进阶拓展:多环节任务脚本优化
1. 多目标杀怪任务:新增多个杀怪计数变量(如KillCount1、KillCount2),分别对应不同怪物,在领奖逻辑中添加多变量达标判断,实现多目标任务。2. 物品前置条件:在接取任务逻辑中添加“CheckItem 任务卷轴 1”,要求玩家持有指定物品才能接取,提升任务门槛。3. 专属奖励配置:发放装备时添加属性参数,如“GiveItem 裁决之杖 1 1 0”(1为强化等级),或发放专属称号,增强任务吸引力。4. 任务链设计:多个任务按顺序衔接,完成前一个任务才能接取下一个,通过任务状态关联,打造连贯任务剧情。

