传奇服务端NPC单次与每日次数任务脚本编写逻辑物品收集杀怪任务模板

来源: 作者: 点击:
先说明脚本适配逻辑,整套示例以GOM引擎语法为准,变量、标签、检测命令可以直接放进NPC文本,区分一次性任务、每日三次任务、收集物品任务三套写法,等级限制统一判定25级及以下才允许接取,超过25级点击NPC直接返回拒绝对话。

第一部分,只可以做一次的杀怪任务脚本。
[@main]
#IF
CHECKLEVELEX > 24
#ACT
SENDMSG 5 你的等级已经超过25级,无法领取该任务。
#SAY
\
<@exit>
#ELSEACT
#SAY
这里是任务描述:前往地图击杀指定怪物,击杀数量达标后即可回来交付任务。\
<接受任务/@acceptkill>
<离开/@exit>

[@acceptkill]
#IF
CHECKHAVETASK 任务标识001
#ACT
#SAY
你已经领取过该任务,请完成后再来交付。
<离开/@exit>
#ELSEIF
CHECKGROUP 任务标识001
#ACT
#SAY
该任务你已经完成过一次,无法再次领取。
<离开/@exit>
#ELSEACT
ADDGROUP 任务标识001
ADDTASK 任务标识001 击杀稻草人 10
#SAY
任务领取成功,请击杀10只稻草人,数量达标会弹出提示。
<离开/@exit>

[@TaskFinish001]
#ACT
SENDMSG 6 你已经完成杀怪任务,是否传送返回NPC位置交付?
MESSAGEBOX 任务完成,点击确定传送回NPC处交任务。
MAPMOVE 3 330 330
#SAY
<交付任务/@finish001>

[@finish001]
#IF
CHECKTASKCOMPLETE 任务标识001
#ACT
DELTASK 任务标识001
GIVE 金币 1000
GIVE 疗伤药 5
SENDMSG 6 任务交付成功,领取对应奖励。
#SAY
任务完成,奖励已发放。
<离开/@exit>

[@exit]
#ACT
CLOSE

杀怪任务的任务触发段需要在QFunction-0文本内补充怪物击杀触发代码,怪物击杀计数、完成弹窗都依靠这段:
[@KillMon]
#IF
ISONHAVETASK 任务标识001
KILLMONNAME = 稻草人
#ACT
INC TASKCOUNT 任务标识001 1
CHECKTASKCOUNT 任务标识001 >= 10
#ACT
CALTASKFINISH 任务标识001
GOTO @TaskFinish001

第二部分,同任务改成每日最多3次版本,等级限制依旧25级以内,不再使用GROUP记录是否完成,改用DAYCOUNT按日期计数。
[@main]
#IF
CHECKLEVELEX > 24
#ACT
SENDMSG 5 你的等级已经超过25级,无法领取该任务。
#SAY
<@exit>
#ELSEACT
#SAY
这里是每日任务描述,每日最多可以完成3次。\
<领取任务/@dayaccept>
<离开/@exit>

[@dayaccept]
#IF
CHECKHAVETASK 任务标识002
#ACT
#SAY
你身上已有该任务,完成后再来交付。
<离开/@exit>
#ELSEIF
CHECKDAYCOUNT 任务标识002 >= 3
#ACT
#SAY
今日任务次数已经用完,请次日再来。
<离开/@exit>
#ELSEACT
ADDTASK 任务标识002 击杀多钩猫 15
#SAY
任务领取成功,请击杀15只多钩猫,达标弹出传送提示。
<离开/@exit>

[@TaskFinish002]
#ACT
MESSAGEBOX 杀怪数量满足,确认传送回NPC交付任务。
MAPMOVE 3 330 330
#SAY
<交付任务/@dayfinish002>

[@dayfinish002]
#IF
CHECKTASKCOMPLETE 任务标识002
#ACT
DELTASK 任务标识002
INC DAYCOUNT 任务标识002 1
GIVE 经验 5000
GIVE 金币 2000
SENDMSG 6 任务交付成功,今日剩余次数:<$GETDAYCOUNTREMAIN(任务标识002,3)>
#SAY
奖励发放完毕。
<离开/@exit>

QFunction-0内对应击杀脚本:
[@KillMon]
#IF
ISONHAVETASK 任务标识002
KILLMONNAME = 多钩猫
#ACT
INC TASKCOUNT 任务标识002 1
CHECKTASKCOUNT 任务标识002 >= 15
#ACT
CALTASKFINISH 任务标识002
GOTO @TaskFinish002

第三部分,收集物品任务模板,需求物品为蜡烛30个,等级限制25级前,单次任务版本,收集够物品自动弹窗传送回NPC。
[@main]
#IF
CHECKLEVELEX > 24
#ACT
SENDMSG 5 你的等级超过25级,不能领取收集任务。
#SAY
<@exit>
#ELSEACT
#SAY
收集任务说明,帮我收集30个蜡烛即可领取奖励。\
<领取收集任务/@itemaccept>
<离开/@exit>

[@itemaccept]
#IF
CHECKHAVETASK 任务标识003
#ACT
#SAY
你身上已有收集任务。
<离开/@exit>
#ELSEIF
CHECKGROUP 任务标识003
#ACT
#SAY
该收集任务只能完成一次,你已经做完。
<离开/@exit>
#ELSEACT
ADDGROUP 任务标识003
ADDTASKITEM 任务标识003 蜡烛 30
#SAY
任务领取,请收集30个蜡烛,收集完成弹出返回提示。
<离开/@exit>

[@ItemFinish003]
#ACT
MESSAGEBOX 蜡烛收集数量满足,确认传送回NPC交任务。
MAPMOVE 3 330 330
#SAY
<交付收集任务/@itemfinish003>

[@itemfinish003]
#IF
CHECKTASKCOMPLETE 任务标识003
CHECKITEM 蜡烛 30
#ACT
TAKE 蜡烛 30
DELTASK 任务标识003
GIVE 黑檀手镯 1
SENDMSG 6 收集任务交付成功,拿到奖励。
#SAY
任务结束。
<离开/@exit>

物品任务的检测逻辑放在QFunction-0物品拾取段,拾取蜡烛的时候计数判断:
[@PickUpItem]
#IF
ISONHAVETASK 任务标识003
$ITEMNAME = 蜡烛
#ACT
INC TASKITEMCOUNT 任务标识003 1
CHECKTASKITEMCOUNT 任务标识003 >= 30
#ACT
CALTASKFINISH 任务标识003
GOTO @ItemFinish003

修改使用的时候,统一替换任务标识、怪物名字、地图编号、坐标、物品名称、数量、奖励内容。GROUP标记永久记录玩家是否完成一次性任务,服务器重启不会清零。DAYCOUNT按自然日重置次数,引擎自带日期判定,不需要额外写时间清理脚本。任务标识不能重复,三个任务要使用不同编号,避免冲突。传送坐标改成NPC本身所在地图和坐标,MAPMOVE后面三个参数依次是地图号、X坐标、Y坐标。如果需要收集任务也做成每日3次,移除GROUP相关判断,换成CHECKDAYCOUNT和INC DAYCOUNT,结构和每日杀怪任务保持一致。等级判定命令CHECKLEVELEX > 24代表大于24级也就是25级及以上拦截,符合25级之前才允许接取的条件。所有MESSAGEBOX就是需求里自动弹出的提示对话框,玩家确认后执行传送回到NPC位置。任务领取之后,任务标记保存在玩家角色存档,下线不会清空进度。

额外补充常见报错排查点,任务标识大小写保持统一,物品名字、怪物名字和数据库内名称完全一致,多空格或者文字不符会造成计数失效。QFunction-0内的触发段不要和原有其他[@KillMon][@PickUpItem]逻辑冲突,多个任务同时存在时,每个任务单独增加一组IF判断分支。如果不需要拾取触发,改成手动在NPC处检测背包物品的写法,去掉拾取段脚本,交付的时候只保留CHECKITEM检测即可。手动检测版本适合不需要实时弹窗,玩家自己攒够物品再来找NPC交付的场景。