当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇任务脚本编写指南:NPC接取杀怪交付全流程

热度:
编写传奇任务脚本需掌握三个核心环节:NPC对话配置、变量记录与怪物击杀判定、奖励发放逻辑。所有脚本文件均存放于Mir200EnvirMarket_Def目录,通过Market_Def.txt注册生效。以下以“新手猎杀野猪”任务为例,详解从接取到交付的完整代码结构与逻辑实现。

第一步是配置NPC对话与任务接取。在Market_Def.txt中添加一行注册信息,格式为“新人接待员3330330新人接待员-000”,表示在盟重土城坐标(330330)放置名为“新人接待员”的NPC,关联脚本文件为“新人接待员-0.txt”。新建该txt文件,编写对话内容。使用[@main]标签作为入口,设置选项供玩家选择。若玩家未接任务,显示接取提示;若已接任务,显示进度查询。关键代码如下:

[@main]
IF
CHECKTASK1
ACT
BREAK
goto@has_task
ELSEACT
goto@no_task

[@no_task]
你好,我是新人接待员。愿意帮我去杀死5只野猪吗?

[@start_task]
ACT
SETON_TIMER060
ADDTASK15
GOTO@task_accepted
SENDMSG6你已接受任务:杀死5只野猪,完成后回来找我。

[@task_accepted]
很好,去吧!野猪通常在石墓一层出没。记得完成任务后回来领取奖励。

[@has_task]
你正在执行杀死野猪的任务,当前进度请查看任务面板。

此处ADDTASK指令用于添加任务,第一个参数为任务编号(自定义数字,如1),第二个参数为目标数量(5只)。SETON_TIMER可设定时器防止任务永久挂起,非必须但建议添加。

第二步是编写怪物击杀判定逻辑。此部分通常写在QFunction.txt文件中,该文件负责全局事件触发。打开Mir200EnvirQFunction.txt,找到[@KillMonster]段落。在此处加入判断代码:当玩家击杀特定怪物时,检查其是否携带对应任务,若满足条件则减少任务计数。代码如下:

[@KillMonster]
IF
EQUALS1野猪
CHECKTASK1
ACT
DEC_TASK11
SENDMSG6你杀死了一只野猪,任务进度更新。
ELSEACT
BREAK

S1代表被击杀怪物的名称,必须与数据库中怪物名完全一致。CHECKTASK1检查玩家是否有编号为1的任务。DEC_TASK11表示将任务1的计数减1。当计数归零时,系统自动标记任务完成,但不会自动交付,需玩家手动返回NPC处。

第三步是编写任务交付与奖励发放脚本。回到“新人接待员-0.txt”,在[@main]下方增加任务完成判断分支。修改[@main]标签逻辑,增加CHECKTASK_COUNT判断剩余数量是否为0。完整逻辑如下:

[@main]
IF
CHECKTASK1
CHECKTASK_COUNT10
ACT
BREAK
goto@finish_task
ELSEIF
CHECKTASK1
ACT
BREAK
goto@has_task
ELSEACT
goto@no_task

[@finish_task]
恭喜你完成了任务!这是给你的奖励。
ACT
DEL_TASK1
GIVEGOLD5000
GIVE强效太阳水5
GIVE沃玛号角1
CHANGELEVEL1
SENDMSG6任务完成!获得5000金币、5个强效太阳水、1个沃玛号角及1级经验。

DEL_TASK1用于删除已完成的任务,防止重复领取。GIVE指令用于发放物品,格式为“GIVE物品名数量”,物品名需在StdItems.db中存在。CHANGELEVEL1表示增加1级经验,也可用GIVEEXP10000直接给予固定经验值。若需发放装备,确保装备属性已在数据库定义。

注意事项:所有脚本文件必须保存为ANSI编码,否则中文字符会导致M2Server读取失败。任务编号需全局唯一,避免不同任务冲突。怪物名称大小写敏感,必须与Mondef.txt或数据库完全一致。若任务需要多阶段,可设置多个任务编号或使用变量记录阶段,例如使用CALC命令操作自定义变量HOLD进行状态标记。

对于更复杂的任务,如需要收集多种物品,可在交付环节增加CHECKITEM判断。例如:

[@finish_task]
IF
CHECKITEM野猪牙5
CHECKITEM猪肉10
ACT
DEL_TASK1
TAKE野猪牙5
TAKE猪肉10
GIVE屠龙刀1
SENDMSG6材料收集齐全,奖励你一把屠龙刀!
ELSEACT
goto@need_items

[@need_items]
你还差一些材料,我需要5个野猪牙和10块猪肉。

TAKE指令用于扣除玩家背包中的任务物品。通过组合CHECKITEM、TAKE、GIVE等指令,可实现任意复杂的任务逻辑。测试时,建议使用GM账号在控制台使用@ADDTASK命令手动添加任务进度,快速验证流程是否通畅。若脚本报错,查看M2Server控制台输出的具体行号,检查语法缩进与标签闭合情况。只要遵循“接取登记-击杀递减-交付校验”的标准流程,即可稳定运行各类杀怪任务。
[顶部]