54MAX里镖车到达目标分两套做法。一套是镖车自动寻路到指定坐标,到达后由功能脚本触发发奖;另一套是玩家接镖后人工跟车,到目标NPC点提交,用开始押运和完成押运命令结任务。两套参数不冲突,按版本要的自动化程度选。
一、自动寻路到点到达触发
镖车支持自动寻路时,在镖车配置或M2押镖参数里写目标地图和坐标,以及人物与镖车距离。公开示例格式:
Dartmap 地图号 X坐标 Y坐标 范围
DartTime 存活秒数 下线是否保留
Dartmap最后一位范围填1到12,表示人物离镖车几格内才启动自动寻路;填0或留空表示不检测人物距离,按设定坐标直接寻路。DartTime第1位是镖车存活秒数,比如1800表示半小时;第2位0表示人物下线镖车消失,1表示下线不消失,等到时间再消失。
到达脚本写在Mir200\Envir\Market_Def\QFunction-0.txt。镖车自动寻路到终点坐标触发:
[@CarPathEnd]
IF
ACT
SENDMSG 7 你的镖车已到达指定位置
GIVE 镖银 1
CHANGEEXP +50000
SetTaskField 玩家变量 1
上面只示范结构,GIVE物品名、经验值、变量名按自己物品库和任务系统改。若要多档奖励,可在#IF下加CHECKLEVELEX、CheckGameGold、CheckServerName等条件分流。
切地图触发单独写:
[@LeaveDart]
IF
ACT
SENDMSG 7 镖车切换地图
;此处可记录当前地图、重置寻路参数
注意自动寻路到达触发只支持坐标点寻路到达,切图触发只支持坐标点切换地图,传送命令切图不一定走这个节点。
二、接镖开始与到NPC提交
不想自动跑车,用传统押镖。NPC脚本里开始押运:
[@StartDart]
IF
ISESCORTING
ACT
SENDMSG 6 你已有进行中的押镖任务
break
IF
CheckEscortInNear
ACT
SENDMSG 6 身边已有镖车,无需重复接
break
IF
;这里放等级、押金、每日次数、会员等条件
CHECKLEVELEX > 35
ACT
STARTESCORT 贡银镖车
SENDMSG 7 押镖开始,请护送到王城镖局
SAVEQUEST
STARTESCORT后面跟镖车DB里的怪物名或NPC定义名,Race按引擎镖车类配置,常用54类押运物时需核对镖车.DB。开始后用ISESCORTING判断进行中,用CheckEscortInNear判断镖车在身边。
目标点NPC做提交:
[@FinDart]
IF
ISESCORTING
ACT
FINISHESCORT
break
[@FinishEscort_贡银镖车]
IF
ACT
GIVE 金条 1
CHANGEEXP +200000
SENDMSG 7 押镖完成,奖励已发放
CLEARQUEST
[@FinishEscort_Fail_1]
ACT
SENDMSG 6 没有进行中的押镖任务
[@FinishEscort_Fail_2]
ACT
SENDMSG 6 镖车不在身边或距离过远,无法提交
FINISHESCORT会根据开始时的镖车名回跳@FinishEscort_镖车名,奖励写在这个子标签里。不同引擎说明书示例用STARTESCORT、FINISHESCORT、[@FinishEscort_镖车1]完成并奖励,可参照改镖车名。
三、自动寻路加提交混合
自动寻路只负责把车开到终点,到达[@CarPathEnd]后可不再让玩家点NPC,直接发奖;也可以到达后只做标记,要求玩家点终点NPC用FINISHESCORT提交。混合写法:
[@CarPathEnd]
IF
ACT
SENDMSG 7 镖车到站,请找镖局主管提交
SET任务标记 1
终点NPC:
[@FinDart]
IF
EQUAL 任务标记 1
ACT
FINISHESCORT
break
[@FinishEscort_贡银镖车]
IF
ACT
GIVE 金条 2
CHANGEEXP +300000
SENDMSG 7 自动到站并提交,奖励双倍
SET任务标记 0
这样避免自动到达重复发奖,也保留人工提交审核。
四、到达触发不生效排查
QFunction-0.txt路径必须是Mir200\Envir\Market_Def下当前加载文件,改完在M2重载QFunction,部分版本重启M2更稳。
Dartmap地图号用M2地图配置里的编号,不用地图中文名;X/Y在可行走区,写在墙里或不可寻路点会导致不到站、不触发[@CarPathEnd]。
范围参数填0会不检测人物距离自动寻路,填1到12才要求人物跟车;如果希望玩家不跟车也到点,用0。
DartTime第2位0时人物下线镖车消失,测试时容易误判到达失败;先设1观察。
STARTESCORT镖车名必须和镖车DB、MonsterDB或押镖配置名一致,差一个字不会出车,也不会到终点。
FINISHESCORT子标签名必须写成@FinishEscort_实际镖车名,写成固定示例_镖车1但实际接的是贡银镖车就不会发奖。
自动寻路到达和切图到达是两套标签,[@CarPathEnd]只管最终坐标到达,[@LeaveDart]只管换图;若终点在同图只设坐标,就别指望切图标签触发。
若用传送把镖车或人物强行送终点,自动寻路到达标签可能不触发,按坐标步行或寻路到达才稳。
五、防重复发奖
自动到达发奖最怕寻路重试、网络重连、多人组队重复触发。做法是在[@CarPathEnd]先判断任务标记:
[@CarPathEnd]
IF
EQUAL 发奖标记 1
ACT
break
IF
ACT
SET 发奖标记 1
GIVE 镖银 1
CHANGEEXP +50000
SENDMSG 7 到站奖励已发
提交类用FINISHESCORT本身会在提交后清押运状态,配合CLEARQUEST或清变量即可。组队押镖若全队发奖,可在#IF里用ISGROUPMASTER、GroupName等条件分别GIVE;只给接车人发奖就不加组队条件。
六、劫镖与死亡不影响到达的配置边界
54MAX另有运镖死亡触发,示例在QFunction-0.txt写[@KillDartCarMob],按镖车名做死亡后丢物等处理。到达触发和死亡触发是两条线:到达标签管到站,死亡标签管被击杀;若同时做自动寻路和劫镖,死亡后应先清发奖标记、清自动寻路目标,避免复活或重新接车时重复触发[@CarPathEnd]。劫镖触发可放QMapEvent-0.txt,按所用引擎的[@Plunder_镖车名]、[@EscortUnderFire]结构处理;54MAX若不支持对应标签,就用死亡QFunction判断镖车名并执行扣货、通知、失败标记。
七、最小可跑示例
自动寻路版,镖车配置:
Dartmap 3 330 330 5
DartTime 1800 1
QFunction-0.txt:
[@CarPathEnd]
IF
EQUAL 镖车发奖 1
ACT
break
IF
ACT
SET 镖车发奖 1
GIVE 镖银 1
CHANGEEXP +80000
SENDMSG 7 镖车到达3号地图330,330,奖励已发
[@LeaveDart]
IF
ACT
SENDMSG 7 镖车换图,继续寻路
NPC接车版,接镖NPC:
[@StartDart]
IF
ISESCORTING
ACT
SENDMSG 6 已有押镖任务
break
IF
CHECKLEVELEX > 35
ACT
STARTESCORT 贡银镖车
SENDMSG 7 已出车,护送到目标镖局
终点NPC:
[@FinDart]
IF
ISESCORTING
ACT
FINISHESCORT
break
[@FinishEscort_贡银镖车]
IF
ACT
GIVE 金条 1
CHANGEEXP +200000
SENDMSG 7 提交完成
[@FinishEscort_Fail_2]
ACT
SENDMSG 6 镖车过远,先让车靠近再提交
改之前备份QFunction-0.txt、接交镖NPC脚本、镖车配置和镖车DB;先拿小范围地图1到1坐标测试[@CarPathEnd]是否出消息,再接GIVE和FINISHESCORT,确认不重复发奖后再上正式地图。
54MAX传奇引擎镖车自动寻路到达目标坐标触发与接镖交镖完成奖励全套配置教程
来源:
作者:
点击:

