传奇任务脚本核心逻辑为“NPC接取任务→前往指定地图杀指定怪物→返回NPC提交任务→领取经验和物品”,全程无需复杂指令,新手可按步骤直接编写,以下从脚本存放路径、核心指令、分步编写、完整实例、常见问题五个方面,详细拆解编写方法,所有内容贴合实际架设场景,可直接复制修改使用。
一、脚本存放路径(必看,否则无法触发)
此类杀怪领奖任务脚本,核心存放路径为服务端Mir200\Envir\Market_Def\QFunction-0.txt,该文件是传奇服务端核心功能触发脚本文件,所有NPC接取、任务触发、奖励发放的脚本,均需添加在此文件中,无需新建额外文件,避免路径错误导致任务无法触发。
补充:部分服务端版本中,任务脚本可存放于Mir200\Envir\QuestDiary\QMission-0.txt(专门的任务脚本文件),两种路径均可,优先选择QFunction-0.txt,适配所有主流引擎,无需额外配置,添加后重启服务端即可生效。
二、核心指令说明(新手必记,无需复杂理解,直接套用)
编写此类任务脚本,仅需用到6类核心指令,无需额外复杂指令,每类指令作用明确,直接对应任务的一个环节,具体如下:
1. [@main]:NPC对话触发指令,玩家点击NPC后,自动触发该指令下的对话内容,用于展示任务接取选项,是任务脚本的起始指令,所有任务脚本均需以此指令开头。
2. #SAY:对话显示指令,用于在游戏界面弹出NPC对话窗口,展示任务说明、接取选项、奖励说明等内容,玩家可通过点击对话中的选项,触发后续任务环节。
3. #IF:条件判断指令,用于设置任务触发、提交的前提条件,比如“玩家未接取任务”“玩家已杀死指定数量怪物”“玩家等级达标”等,只有满足条件,才会执行后续#ACT指令中的操作。
4. #ACT:执行指令,紧跟#IF指令,用于执行具体操作,比如“标记玩家接取任务”“清除任务标记”“发放经验”“发放物品”“传送玩家至指定地图”等,是任务脚本的核心执行指令。
5. SetQuest 变量 数值:任务标记指令,用于标记玩家的任务状态,比如“SetQuest 10 1”代表标记玩家接取了编号为10的任务,“SetQuest 10 0”代表清除任务标记(任务完成或放弃),变量可自定义(0-99均可),避免与其他任务变量冲突。
6. CheckKillMon 怪物名称 数量:杀怪计数判断指令,用于判断玩家是否杀死了指定数量的指定怪物,比如“CheckKillMon 稻草人 5”代表判断玩家是否杀死了5只稻草人,是杀怪任务的核心判断指令。
补充指令:CHANGELEVEL + 数值(发放经验指令,数值为经验值,比如CHANGELEVEL + 10000代表发放10000点经验);Give 物品名称 数量(发放物品指令,比如Give 布衣 1代表发放1件布衣);MapMove 地图编号 X坐标 Y坐标(传送指令,可选,用于将玩家传送到杀怪地图,比如MapMove 3 330 350)。
三、分步编写(按“接任务-杀怪-交任务-领奖”顺序,新手可按步骤复制)
以“新手杀怪任务”为例,具体要求:玩家在新手村NPC(比如“新手指导员”)处接取任务,要求杀死5只稻草人,完成后返回NPC处,领取10000点经验和1件布衣,分步编写如下,每一步均标注用途,方便修改。
第一步:编写NPC接任务脚本(触发任务,标记任务状态)
脚本内容:
[@main]
#IF
CheckQuest 10 0 // 判断玩家是否未接取该任务(变量10为自定义任务编号,0代表未接取)
#SAY
欢迎来到新手村!想要快速升级,就先完成我的任务吧!
任务要求:前往新手村野外,杀死5只稻草人。
完成奖励:10000点经验 + 1件布衣。
<接取任务/@accept> <放弃/@exit>
#ACT
SetQuest 10 1 // 标记玩家接取任务(变量10设为1,代表已接取)
SendMsg 7 【任务提示】已接取新手杀怪任务,请前往新手村野外杀死5只稻草人!
// 可选:添加传送指令,直接将玩家传送到杀怪地图
MapMove 3 330 350 // 3为新手村野外地图编号,330 350为地图安全坐标
说明:此步骤核心是让玩家点击NPC后,看到任务说明和接取选项,接取后标记任务状态,避免重复接取,可选添加传送指令,方便玩家快速前往杀怪地点,地图编号和坐标可根据自身服务端修改。
第二步:编写杀怪计数及任务提交脚本(判断杀怪数量,允许提交任务)
脚本内容(接在第一步脚本后面,无需单独编写):
[@accept]
#IF
CheckQuest 10 1 // 判断玩家已接取任务
CheckKillMon 稻草人 5 // 判断玩家是否杀死5只稻草人
#SAY
不错嘛!已经杀死5只稻草人,任务完成!
点击下方领取你的奖励吧!
<领取奖励/@reward><放弃奖励/@exit>
#ELSESAY
任务还未完成哦!还需要杀死<COLOR=251>5 - $KILLCOUNT(稻草人)</COLOR>只稻草人,加油!
<返回/@main> <放弃任务/@giveup>
说明:@accept是接取任务后的触发指令,玩家接取任务后,再次点击NPC,会自动判断杀怪数量;若杀怪数量达标,显示提交任务和领取奖励选项;若未达标,显示剩余杀怪数量,提醒玩家继续杀怪;$KILLCOUNT(稻草人)是自动计数变量,会实时显示玩家已杀死的稻草人数量,无需手动赋值。
第三步:编写放弃任务脚本(可选,避免玩家接取任务后无法放弃)
脚本内容(接在第二步脚本后面):
[@giveup]
#IF
CheckQuest 10 1 // 判断玩家已接取任务
#SAY
确定要放弃任务吗?放弃后,已杀死的怪物数量会清零,需重新接取任务。
<确定放弃/@confirm_giveup> <取消/@main>
[@confirm_giveup]
#ACT
SetQuest 10 0 // 清除任务标记,恢复未接取状态
SendMsg 7 【任务提示】已放弃新手杀怪任务,可重新在新手指导员处接取!
#SAY
已为你放弃任务,欢迎下次再来接取!
<返回/@main>
说明:放弃任务脚本可根据需求添加,核心是清除任务标记,让玩家可以重新接取任务,避免任务卡死,未接取任务的玩家,点击放弃选项不会触发任何操作。
第四步:编写奖励发放脚本(核心环节,发放经验和物品)
脚本内容(接在第三步脚本后面):
[@reward]
#IF
CheckQuest 10 1 // 判断玩家已接取任务
CheckKillMon 稻草人 5 // 再次确认杀怪数量,避免异常领取奖励
#ACT
SetQuest 10 0 // 清除任务标记,任务完成,无法再次领取奖励
CHANGELEVEL + 10000 // 发放10000点经验
Give 布衣 1 // 发放1件布衣(物品名称需与服务端StdItems.DB中的名称一致)
SendMsg 7 【任务提示】恭喜你完成新手杀怪任务,获得10000点经验和1件布衣!
#SAY
奖励已发放至你的背包,请查收!
后续还有更多任务,记得常来看看哦!
<离开/@exit>
说明:奖励发放脚本需添加双重判断,避免玩家重复领取奖励;发放的物品名称必须与服务端数据库(StdItems.DB)中的物品名称完全一致,否则无法发放;经验值可根据需求修改,比如改为20000、50000,适配不同等级的任务。
四、完整脚本实例(可直接复制修改,新手首选)
以下是完整的新手杀怪任务脚本,包含“接任务-杀怪-交任务-领奖励-放弃任务”所有环节,可直接复制到QFunction-0.txt文件中,修改NPC名称、怪物名称、杀怪数量、奖励、地图编号和坐标即可使用,适配所有主流传奇引擎。
完整脚本:
[@main]
#IF
CheckQuest 10 0
#SAY
欢迎来到新手村!想要快速升级,就先完成我的任务吧!
任务要求:前往新手村野外,杀死5只稻草人。
完成奖励:10000点经验 + 1件布衣。
<接取任务/@accept> <放弃/@exit>
#ACT
SetQuest 10 1
SendMsg 7 【任务提示】已接取新手杀怪任务,请前往新手村野外杀死5只稻草人!
MapMove 3 330 350
[@accept]
#IF
CheckQuest 10 1
CheckKillMon 稻草人 5
#SAY
不错嘛!已经杀死5只稻草人,任务完成!
点击下方领取你的奖励吧!
<领取奖励/@reward> <放弃奖励/@exit>
#ELSESAY
任务还未完成哦!还需要杀死<COLOR=251>5 - $KILLCOUNT(稻草人)</COLOR>只稻草人,加油!
<返回/@main> <放弃任务/@giveup>
[@giveup]
#IF
CheckQuest 10 1
#SAY
确定要放弃任务吗?放弃后,已杀死的怪物数量会清零,需重新接取任务。
<确定放弃/@confirm_giveup> <取消/@main>
[@confirm_giveup]
#ACT
SetQuest 10 0
SendMsg 7 【任务提示】已放弃新手杀怪任务,可重新在新手指导员处接取!
#SAY
已为你放弃任务,欢迎下次再来接取!
<返回/@main>
[@reward]
#IF
CheckQuest 10 1
CheckKillMon 稻草人 5
#ACT
SetQuest 10 0
CHANGELEVEL + 10000
Give 布衣 1
SendMsg 7 【任务提示】恭喜你完成新手杀怪任务,获得10000点经验和1件布衣!
#SAY
奖励已发放至你的背包,请查收!
后续还有更多任务,记得常来看看哦!
<离开/@exit>
五、进阶修改(根据需求调整,适配不同任务难度)
1. 修改杀怪数量和怪物类型:将“CheckKillMon 稻草人 5”改为“CheckKillMon 骷髅 10”,代表要求杀死10只骷髅;怪物名称需与服务端Monster.DB中的怪物名称一致,比如僵尸、沃玛卫士等,可根据任务难度调整数量。
2. 修改奖励:将“CHANGELEVEL + 10000”改为“CHANGELEVEL + 50000”,增加经验值;将“Give 布衣 1”改为“Give 木剑 1”“Give 小量药水 5”,更换奖励物品,可添加多个Give指令,发放多种物品,比如同时发放武器和药水。
3. 增加等级限制:在接任务的#IF指令后添加“CheckLevel 1 10”,代表只有1-10级的玩家才能接取任务,避免高等级玩家接取新手任务,指令格式为“CheckLevel 最低等级 最高等级”。
4. 多怪物杀怪任务:若任务要求杀死多种怪物,可在#IF指令后添加多个CheckKillMon指令,比如“CheckKillMon 稻草人 3 CheckKillMon 僵尸 2”,代表要求杀死3只稻草人和2只僵尸,多个条件需同时满足。
5. 取消传送功能:删除脚本中的“MapMove 3 330 350”指令,玩家接取任务后,需自行前往杀怪地图,适配需要玩家自行探索的场景。
六、常见问题及解决方法(新手必看,避免脚本失效)
1. 点击NPC无反应,任务无法触发:脚本存放路径错误,需确认脚本添加到Mir200\Envir\Market_Def\QFunction-0.txt中,且重启服务端;若仍无反应,检查NPC是否正确配置,NPC名称需与脚本中的触发名称一致。
2. 杀怪后无法提交任务:怪物名称填写错误,需与服务端Monster.DB中的怪物名称完全一致(区分大小写,比如“稻草人”不可写为“稻草”“DaoCaoRen”);或杀怪数量判断指令错误,比如将“CheckKillMon 稻草人 5”写为“CheckKillMon 稻草人 50”。
3. 奖励无法发放:物品名称填写错误,需与服务端StdItems.DB中的物品名称一致,比如“布衣”不可写为“布甲”;或经验值指令错误,将“CHANGELEVEL + 10000”写为“CHANGELEVEL 10000”(缺少“+”号)。
4. 玩家可重复领取奖励:未添加“SetQuest 10 0”指令,或指令位置错误,需在奖励发放的#ACT指令中,先添加清除任务标记的指令,再发放奖励,避免重复领取。
5. 脚本报错,服务端启动失败:指令拼写错误,所有指令需大写(如@main、#IF、#ACT、SetQuest),小写会导致脚本失效;符号需为英文,比如中文逗号、中文括号,需替换为英文逗号、英文括号。
6. 任务标记异常,无法重新接取:脚本中未添加放弃任务脚本,或清除任务标记的指令错误,需检查“SetQuest 10 0”指令是否正确,确保放弃任务和完成任务后,均能清除任务标记。
七、补充说明
所有脚本编写完成后,需保存QFunction-0.txt文件,重启服务端才能生效;编写时可添加注释(// 后面的内容为注释),用于标注脚本作用,方便后续修改,注释不会影响脚本运行;不同引擎的脚本指令基本一致,无需额外修改指令格式,仅需调整地图编号、怪物名称、物品名称、经验值等参数,适配自身服务端即可。
若需编写多个杀怪任务,可重复上述步骤,修改任务编号(如将变量10改为11、12),避免任务变量冲突,每个任务脚本独立编写,依次添加到QFunction-0.txt文件中即可,无需区分顺序,重启服务端后,所有任务均可正常触发。

