传奇任务脚本编写核心是遵循“触发条件-执行逻辑-奖励/惩罚”的三段式框架,无需复杂编程基础,掌握常用命令和基础语法,就能编写新手引导、杀怪、收集、对话等各类任务脚本,以下是完整实操内容,包含语法规则、分场景脚本、问题排查,所有脚本可直接复制修改使用。
一、传奇任务脚本核心基础(必看)
传奇任务脚本依托服务端脚本引擎运行,核心由触发标识、逻辑判断、执行命令三部分组成,所有命令需严格遵循语法规则,否则脚本无法生效,核心基础内容如下:
1. 核心语法规则
① 命令全部大写:所有脚本命令(如#IF、#ACT、SendMsg、CheckItem等)必须大写,小写或大小写混合会导致命令失效,例如“checkitem”需改为“CheckItem”。
② 结尾加英文分号:所有执行类命令、提示类命令结尾,必须添加英文分号“;”,遗漏分号会导致脚本中断执行,例如“Give 金币 1000;”不可遗漏分号。
③ 编码格式为ANSI:脚本文件需保存为ANSI编码,右键脚本文件→记事本打开→文件→另存为→编码选择ANSI,否则会出现中文乱码,导致脚本无法解析。
④ 触发标识唯一:每个任务脚本需有唯一的触发标识(如[@main]、[@接受任务]、[@完成任务]),标识用英文中括号包裹,不可重复,否则会出现触发冲突。
⑤ 变量规范使用:常用变量分为字符型(A0-A9、B0-B9)和数字型(P0-P9、D0-D9),变量名仅可使用指定字母+数字组合,赋值时需区分类型,例如“mov A0 新手任务”(字符型)、“mov P0 0”(数字型)。
2. 常用核心命令(新手必备)
任务脚本的核心是用命令实现逻辑,以下是编写各类任务必用的命令,标注用途和用法,直接套用即可:
① 触发与跳转命令:[@标识](触发入口)、GOTO @标识(跳转到指定触发段)、Delaygoto 3 @标识(延迟3秒跳转)、BREAK(终止脚本)、@exit(关闭对话框)。
② 逻辑判断命令:#IF(判断条件开头)、#ACT(条件满足执行)、#ELSEACT(条件不满足执行)、CheckLevel 等级(检测玩家等级)、CheckItem 物品 数量(检测玩家拥有物品及数量)、CheckJob 职业(检测玩家职业,如warr战士、wizard法师)、equal 变量 数值(检测变量是否等于指定值)、not CheckItem 物品(检测玩家无指定物品)。
③ 执行操作命令:Give 物品 数量(发放物品)、Take 物品 数量(扣除物品)、GiveGold 数量(发放金币)、TakeGold 数量(扣除金币)、AddExp 数值(发放经验)、SetVar 变量 数值(给变量赋值)、IncVar 变量 数值(变量自增)、DecVar 变量 数值(变量自减)、AddGuildMember 行会名(加入行会)、Gmexecute 命令(执行管理员命令)。
④ 提示命令:SendMsg 颜色代码 0 提示内容;(玩家个人提示)、Messagebox 提示内容;(弹窗提示,需点击确定)、SendBroad 255 0 提示内容;(全服提示)。
3. 脚本存放路径
编写好的任务脚本,需存放至传奇服务端指定文件夹,否则无法触发,具体路径:Mirserver\Mir200\Envir\QuestDiary,可新建.txt文件(如Task1.txt)粘贴脚本,也可粘贴至现有脚本文件,保存后重启服务端即可生效。
二、分场景传奇任务脚本(直接可用)
传奇任务核心分为4类:新手引导任务、杀怪任务、物品收集任务、对话任务,以下是每类任务的完整脚本,新手可直接复制,修改物品、等级、数值等参数即可使用,贴合实际游戏场景。
场景1:新手引导任务(对话+发放基础道具)
核心:玩家与NPC对话接受任务,完成对话后发放新手装备和金币,引导玩家熟悉游戏,脚本如下:
// 新手引导任务脚本,触发标识[@main]绑定NPC对话
[@main]
#IF
CheckLevel < 10 // 检测玩家等级低于10级,仅新手可触发
equal P0 0 // 检测玩家未接受过该任务(P0为任务状态变量,0=未接受,1=已完成)
#SAY
欢迎来到传奇世界!我是新手引导员,完成我的引导,即可获得新手装备和金币。\
点击【接受引导】领取你的第一份奖励吧!\
<接受引导/@accept> <暂不接受/@exit>
#ELSEACT
CheckLevel >= 10
#SAY
你已不是新手,无需完成引导任务,快去挑战更高难度的任务吧!\
<离开/@exit>
BREAK
// 接受任务触发段
[@accept]
#ACT
Give 新手剑 1; // 发放新手武器
Give 新手衣 1; // 发放新手防具
GiveGold 1000; // 发放1000金币
AddExp 1000; // 发放1000经验,帮助玩家快速升级
SetVar P0 1; // 将任务状态变量设为1,标记已完成
SendMsg 250 0 新手引导任务完成,获得新手装备和金币,快去提升等级吧!;
Messagebox 新手引导任务完成!奖励已发放至背包,请查收!;
GOTO @main // 跳转回NPC对话界面
BREAK
场景2:杀怪任务(击杀指定怪物+提交任务)
核心:玩家接受任务后,击杀指定数量的怪物,返回NPC处提交任务,领取经验和道具奖励,脚本如下:
// 杀怪任务(击杀10只稻草人),适合10-15级玩家
[@main]
#IF
CheckLevel >= 10 // 限制玩家等级≥10级可接受
equal P1 0 // P1为任务状态变量,0=未接受,1=已接受,2=已完成
#SAY
最近新手村稻草人泛滥,扰乱村民生活,麻烦你去击杀10只稻草人,\
完成任务后,我会给你丰厚的经验和道具奖励!\
<接受任务/@accepttask> <拒绝/@exit>
#ELSEIF
equal P1 1 // 检测玩家已接受任务,未完成
#SAY
你已接受杀怪任务,当前已击杀<$STR(P2)>只稻草人,还需击杀<$STR(10-P2)>只,\
加油!完成后记得回来找我提交任务。\
<离开/@exit>
#ELSEIF
equal P1 2 // 检测玩家已完成任务
#SAY
非常感谢你帮助村民解决了稻草人泛滥的问题,这是给你的奖励,\
后续有其他任务,我会第一时间通知你!\
<离开/@exit>
BREAK
// 接受任务触发段
[@accepttask]
#ACT
SetVar P1 1; // 标记任务已接受
SetVar P2 0; // P2为击杀数量统计变量,初始为0
SendMsg 5 任务接受成功!请前往新手村击杀10只稻草人,完成后返回提交任务!;
GOTO @main
BREAK
// 击杀怪物触发段(绑定稻草人击杀动作)
[@KillMonster_稻草人]
#IF
equal P1 1 // 仅已接受任务的玩家触发
small P2 10 // 检测击杀数量小于10
#ACT
IncVar P2 1; // 击杀数量+1
SendMsg 1 已击杀稻草人<$STR(P2)>/10,继续加油!;
// 检测击杀数量达到10,标记任务完成
CheckVar P2 = 10
SetVar P1 2; // 标记任务已完成
SendMsg 250 0 击杀稻草人任务已完成!请返回NPC处提交任务,领取奖励!;
BREAK
// 提交任务触发段
[@submit]
#IF
equal P1 2 // 检测任务已完成
#ACT
AddExp 5000; // 发放5000经验
Give 中级药水 3; // 发放3瓶中级药水
GiveGold 5000; // 发放5000金币
Messagebox 任务提交成功!奖励已发放,请注意查收!;
GOTO @main
BREAK
#ELSEACT
Messagebox 你尚未完成任务,无法提交!;
BREAK
场景3:物品收集任务(收集指定道具+提交兑换)
核心:玩家接受任务后,收集指定数量的道具,返回NPC处提交,领取奖励,脚本如下:
// 物品收集任务(收集5个矿石),适合15-20级玩家
[@main]
#IF
CheckLevel >= 15 // 限制等级≥15级
equal P3 0 // P3为任务状态,0=未接受,1=已完成
#SAY
我需要5个矿石来锻造装备,麻烦你去矿洞收集5个矿石,\
收集完成后交给我,我会给你锻造材料作为奖励!\
<接受任务/@acceptcollect> <离开/@exit>
#ELSEIF
equal P3 1 // 已完成任务
#SAY
非常感谢你的帮助,矿石已收到,这是给你的奖励,\
后续若有需要,我还会麻烦你!\
<离开/@exit>
BREAK
// 接受任务
[@acceptcollect]
#ACT
SetVar P3 0; // 标记未完成,仅接受任务
SendMsg 5 任务接受成功!请前往矿洞收集5个矿石,提交后领取奖励!;
GOTO @main
BREAK
// 提交道具
[@submitcollect]
#IF
CheckItem 矿石 5 // 检测玩家拥有5个矿石
#ACT
Take 矿石 5; // 扣除5个矿石
Give 锻造石 2; // 发放2个锻造石
AddExp 8000; // 发放8000经验
SetVar P3 1; // 标记任务已完成
Messagebox 道具提交成功!奖励已发放,可用于装备锻造!;
GOTO @main
BREAK
#ELSEACT
Messagebox 你拥有的矿石不足5个,无法提交任务!;
BREAK
场景4:对话任务(多NPC对话+完成任务)
核心:玩家需依次与多个NPC对话,完成对话流程后,返回初始NPC领取奖励,脚本如下:
// 对话任务(与3个NPC对话),适合20级以上玩家
[@main]
#IF
CheckLevel >= 20 // 限制等级≥20级
equal P4 0 // P4为任务状态,0=未开始,1=已找第一个NPC,2=已找第二个,3=已完成
#SAY
请你帮我传递一个消息,依次去找铁匠、药剂师、杂货商对话,\
完成所有对话后,返回我这里领取奖励!\
<接受任务/@accepttalk> <拒绝/@exit>
#ELSEIF
equal P4 1 // 已找铁匠
#SAY
你已找到铁匠,接下来请去找药剂师对话,完成后继续找杂货商!\
<离开/@exit>
#ELSEIF
equal P4 2 // 已找铁匠、药剂师
#SAY
还差最后一步,去找杂货商对话,完成后返回我这里领取奖励!\
<离开/@exit>
#ELSEIF
equal P4 3 // 已完成所有对话
#SAY
消息已成功传递,辛苦你了,这是给你的奖励!\
<领取奖励/@getreward> <离开/@exit>
BREAK
// 接受对话任务
[@accepttalk]
#ACT
SetVar P4 0; // 初始状态
SendMsg 5 任务接受成功!请依次找铁匠、药剂师、杂货商对话!;
GOTO @main
BREAK
// 与铁匠对话触发
[@talk_铁匠]
#IF
equal P4 0 // 仅未找过铁匠的玩家触发
#ACT
SetVar P4 1; // 标记已找铁匠
Messagebox 我已收到消息,麻烦你转告任务发布者,我会按时准备好装备!;
BREAK
// 与药剂师对话触发
[@talk_药剂师]
#IF
equal P4 1 // 仅已找过铁匠的玩家触发
#ACT
SetVar P4 2; // 标记已找药剂师
Messagebox 消息已收到,药水已准备就绪,随时可以领取!;
BREAK
// 与杂货商对话触发
[@talk_杂货商]
#IF
equal P4 2 // 仅已找过铁匠、药剂师的玩家触发
#ACT
SetVar P4 3; // 标记所有对话完成
Messagebox 消息已收到,各类杂货已备齐,请转告任务发布者!;
SendMsg 250 0 所有对话已完成,请返回初始NPC处领取奖励!;
BREAK
// 领取奖励
[@getreward]
#ACT
Give 高级药水 5; // 发放5瓶高级药水
GiveGold 10000; // 发放10000金币
AddExp 15000; // 发放15000经验
Messagebox 奖励领取成功!感谢你的帮助!;
GOTO @main
BREAK
三、脚本参数修改方法(新手必看)
上述脚本可根据自身服务端需求,修改核心参数,无需修改脚本结构,修改后保存重启服务端即可生效,具体修改方法如下:
1. 等级限制修改
找到脚本中“CheckLevel 数值”命令,修改数值即可调整任务接受等级,例如“CheckLevel >= 10”改为“CheckLevel >= 15”,即可将接受等级调整为15级以上;“CheckLevel < 10”改为“CheckLevel < 15”,限制15级以下玩家触发。
2. 物品、数量修改
① 物品修改:将“Give 物品 数量”“Take 物品 数量”“CheckItem 物品 数量”中的“物品”,替换为自身服务端的物品名称,需与物品数据库中的名称完全一致(区分大小写),例如将“新手剑”改为“青铜剑”。
② 数量修改:修改物品后的数字,即可调整发放、扣除、收集的数量,例如“Give 新手剑 1”改为“Give 新手剑 2”,发放2把新手剑;“CheckItem 矿石 5”改为“CheckItem 矿石 10”,需收集10个矿石。
3. 奖励修改
① 经验修改:修改“AddExp 数值”中的数值,调整经验发放量,例如“AddExp 1000”改为“AddExp 2000”,发放2000经验。
② 金币修改:修改“GiveGold 数值”“TakeGold 数值”中的数值,调整金币数量,例如“GiveGold 1000”改为“GiveGold 3000”,发放3000金币。
③ 道具修改:替换“Give 物品 数量”中的物品和数量,即可调整奖励道具,例如“Give 中级药水 3”改为“Give 高级药水 2”。
4. 任务变量修改
若出现变量冲突(多个任务使用同一变量),可修改变量名称,例如将“P0”改为“P5”,需确保所有关联该变量的命令(SetVar、IncVar、equal、CheckVar等)统一修改,避免变量混乱导致任务失效。
5. 提示内容修改
修改“SendMsg”“Messagebox”后的文字内容,可调整提示信息,例如“新手引导任务完成”改为“新手任务已完成,快去矿洞升级吧!”,保持提示清晰、贴合任务即可,无需修改格式。
四、常见脚本问题排查(新手无忧)
脚本编写后若无法触发、执行异常,按以下步骤逐一排查,均可解决,无需复杂操作,重点排查语法和参数错误:
1. 脚本无法触发
排查步骤:① 检查脚本存放路径是否正确,必须在Mirserver\Mir200\Envir\QuestDiary文件夹;② 确认触发标识是否正确,如[@main]不可写错为[@Main]、[@main1];③ 检查脚本编码是否为ANSI,若为UTF-8会导致无法解析;④ 核对玩家等级、职业等触发条件,确保玩家满足触发要求。
2. 命令失效、脚本中断
排查步骤:① 检查所有命令是否全部大写,如“give”改为“Give”、“checkitem”改为“CheckItem”;② 检查所有执行类命令结尾是否添加英文分号,遗漏分号会导致脚本中断;③ 核对变量名称,确保变量赋值、调用的名称一致,例如“SetVar P0 1”不可调用“<$STR(P1)>”。
3. 奖励发放错误、扣除失败
排查步骤:① 检查物品名称是否与服务端物品数据库一致,区分大小写,例如“矿石”不可写为“矿石1”;② 检查物品数量,确保玩家拥有足够的物品(扣除时),避免出现负数扣除;③ 核对“Give”“Take”命令,避免写反(如应扣除写为发放)。
4. 提示文字乱码
排查步骤:右键点击脚本文件→记事本打开→文件→另存为→编码选择ANSI,保存覆盖原有文件,重启服务端,乱码即可解决;若仍有乱码,删除乱码文字,手动重新输入,避免复制粘贴导致的编码错乱。
5. 任务重复触发
排查步骤:检查任务状态变量是否正确设置,例如完成任务后是否将变量设为“1”(已完成),避免变量始终为“0”(未接受)导致重复触发;同时检查脚本末尾是否添加“BREAK”命令,未添加会导致脚本循环执行。
6. 杀怪任务不统计数量
排查步骤:检查杀怪触发标识是否正确,需与怪物名称一致,例如“[@KillMonster_稻草人]”不可写错为“[@KillMonster_稻草]”;核对变量统计命令“IncVar P2 1”,确保变量名称与显示、判断的变量一致。
五、进阶脚本编写技巧(按需选择)
掌握基础脚本编写后,可根据游戏需求,添加进阶功能,提升任务可玩性,具体技巧如下:
1. 限时任务:在脚本#IF段添加时间判断命令,例如“CheckTime 10:00 12:00”,仅在10:00-12:00期间可接受任务,超时无法触发;也可使用“Delaygoto 3600 @overtime”,设置1小时后任务超时。
2. 职业限制任务:添加“CheckJob 职业”命令,例如“CheckJob warr”,仅战士可接受任务;“CheckJob wizard OR CheckJob taos”,法师和道士可接受任务,适配不同职业的任务需求。
3. 多条件触发:在#IF段添加多个判断条件,用“OR”(或)、“AND”(且)连接,例如“CheckLevel >= 20 AND CheckItem 钥匙 1”,玩家等级≥20级且拥有1把钥匙,才可触发任务;“CheckJob warr OR CheckLevel >= 30”,战士或30级以上玩家可触发。
4. 任务连锁:将多个任务关联,例如完成杀怪任务后,才能接受物品收集任务,通过变量判断实现,例如“equal P1 2”(杀怪任务已完成),才可接受收集任务,提升任务连贯性。
5. 随机奖励:使用“movr 变量 数值”定义随机变量,例如“movr P5 3”,变量P5随机为0-3,搭配判断命令,实现随机发放奖励,例如P5=0发放药水,P5=1发放装备,增加任务趣味性。
六、补充说明
1. 脚本编写完成后,建议先在测试服测试,模拟任务流程(接受、执行、提交),确认无报错、奖励正常、触发正常后,再应用到正式服务端。
2. 不同引擎的扩展命令可能存在细微差异,编写脚本前,可查看对应引擎的帮助文档,确认扩展命令的语法格式,核心语法规则完全一致。
3. 脚本编写时,建议添加注释(// 注释内容),标注脚本用途、变量含义、命令功能,便于后续修改和维护,例如“// P0为任务状态变量,0=未接受,1=已完成”。
4. 避免使用复杂语法和冗余命令,脚本逻辑尽量简洁明了,既便于引擎解析,也便于后续修改,基础语法即可满足大部分任务需求。
5. 脚本备份:编写完成后,复制一份脚本文件备份,避免修改错误导致脚本损坏,同时便于后续恢复和版本调整。
6. 变量使用注意:字符型变量(A0-A9)用于存储文字信息,数字型变量(P0-P9)用于存储数值,不可混用,例如不可用数字型变量存储物品名称。
传奇任务脚本编写全教程 新手可直接复制使用
来源:
作者:
点击:

