传奇服务端本身没有内置"防跑单"功能,需要通过QFunction-0.txt的系统触发事件配合QuestDiary自定义变量来实现。主流做法有两种思路:一是打BOSS时标记分配状态,队员在BOSS死亡后未领取奖励前离队则触发惩罚(扣金币/传回/取消领奖资格);二是进副本前记录队伍名单,通关后只给名单内仍在队的人发奖励。以下以GOM/GEE引擎为例说明完整配置。
一、目录与变量准备
在 Mir200\Envir\QuestDiary\ 下新建文件夹 防跑单,用于存放变量文本文件。登录初始化脚本在 QManage.txt 的 [@Login] 段加入变量清零:
[@Login]
#IF
#ACT
CALCVAR HUMAN A97 = 0
CALCVAR HUMAN A98 = 0
SAVEVAR HUMAN A97 ..\QuestDiary\防跑单\可领取.txt
SAVEVAR HUMAN A98 ..\QuestDiary\防跑单\分配锁.txt
• A98=1 表示BOSS已死、进入分配锁定期
• A97=1 表示该队员可被队长NPC分配奖励
二、组队事件触发(QFunction-0.txt)
GOM/GEE引擎支持 @GroupAddMember(队员入队触发)和 @GroupDelMember(队员离队触发),在 QFunction-0.txt 中添加:
;==========防跑单组队触发==========
[@GroupAddMember]
#IF
#ACT
MOV S0 <$USERNAME>
CALCVAR HUMAN A99 = 1
SENDMSG 5 已加入队伍,防跑单机制生效!
[@GroupDelMember]
#IF
#ACT
MOV S0 <$USERNAME>
CHECKLEVEl > 0
GOTO @防跑单_离队检测
三、离队检测与惩罚逻辑
继续在 QFunction-0.txt 写离队检测,判断是否在分配锁定期(A98=1)离队:
[@防跑单_离队检测]
#IF
CHECKVAR HUMAN A98 = 1
#ACT
; 扣除背包金币作为跑单惩罚,数值自行调整
TAKE 金币 50000
; 也可MAPMOVE传回指定坐标,或只清变量让TA失去领奖资格
CALCVAR HUMAN A97 = 0
CALCVAR HUMAN A98 = 0
SENDMSG 1 <$USERNAME> 在分配期间离队,视为跑单已扣除金币并取消分配资格!
#ELSEACT
CALCVAR HUMAN A97 = 0
CALCVAR HUMAN A98 = 0
如果引擎不支持直接拦截离队,上面这段虽不能阻止离队动作,但能做到离队瞬间检测A98状态并执行扣钱或取消领奖标记。
四、BOSS死亡触发分配锁定
在 QFunction-0.txt 或用 QMonster.txt 的 @KillMob 检测BOSS名,击杀后设置分配锁并通知队员去NPC领奖:
[@KillMob]
#IF
KILLMONNAME 祖玛教主
CHECKGROUPCOUNT > 1
#ACT
; 设置分配锁
CALCVAR HUMAN A98 = 1
SAVEVAR HUMAN A98 ..\QuestDiary\防跑单\分配锁.txt
; 给全队打可领取标记(GOM可用TEAMMEMBEREXECUTE,老引擎需队员自己点NPC检测)
TEAMMEMBEREXECUTE CALCVAR HUMAN A97 = 1
TEAMMEMBEREXECUTE SAVEVAR HUMAN A97 ..\QuestDiary\防跑单\可领取.txt
SENDMSG 5 BOSS已击杀!请全队速至分配NPC领取,中途离队视为跑单!
五、分配奖励NPC脚本
在 Envir\Market_Def\ 新建 分配NPC.txt,Merchant.txt 里注册好坐标,NPC脚本内容:
[@main]
#IF
ISGROUPMEMBER
CHECKVAR HUMAN A97 = 1
CHECKVAR HUMAN A98 = 1
#ACT
GIVE 屠龙 1
; 平分金币示例:GIVE 金币 50000
CALCVAR HUMAN A97 = 0
CALCVAR HUMAN A98 = 0
SAVEVAR HUMAN A97 ..\QuestDiary\防跑单\可领取.txt
SAVEVAR HUMAN A98 ..\QuestDiary\防跑单\分配锁.txt
SENDMSG 6 你已领取队伍分配奖励!
#ELSEACT
SAY 你不在分配名单或已离队/已领取!
已跑单离队之人在此NPC处因A97被清零无法领取任何东西。
六、副本名单比对方案(可选强化)
若你做的是专属副本可用名单比对法——队长开启副本时用 AddTextListEx 把队员名写入 ..\QuestDiary\防跑单\队伍名单.txt,通关发放奖励时逐行读取名单用 CHECKNAMEINLIST 比对,不在名单或已离队(CHECKGROUP失败)则不发。此方法适合自定义副本NPC而不依赖组队触发事件。
七、注意事项
• 变量A系为人物个人变量,G系为队伍共享变量(部分引擎支持G0-G99),队伍共享变量更适合标记BOSS死亡状态
• TEAMMEMBEREXECUTE 是GOM/GEE较新版本命令,Blue引擎或老Hero需用队员各自点击NPC检测A98状态代替
- 扣金币/物品数值、是否允许传送回队长处按你服设定改,部分服改成只取消领奖资格更不易引发投诉
• 每次重启服务端建议在登录脚本初始化A97 A98,防止残留变量导致误判
传奇组队防跑单脚本写法 GOM/GEE/HERO引擎检测离队扣押金与BOSS掉落分配教程
来源:
作者:
点击:

