防跑单机制设计思路
“跑单”指队员在获取BOSS掉落或任务奖励后,未经队长分配直接离队。防跑单脚本需实现离队惩罚与分配锁定。核心逻辑:队员加入队伍时,脚本记录其状态;若队员在BOSS死亡后、未完成分配前离队,系统自动将其传送回队长身边或扣除其背包物品。此功能需修改服务端脚本,适用于GOM、GEE、BLUE等主流引擎。
基础环境:组队触发与变量定义
防跑单脚本依赖引擎的组队触发功能。需在 QFunction-0.txt(主触发脚本)中监听组队事件,并使用自定义变量标记队员状态。
1. 组队触发事件配置
在 QFunction-0.txt 开头添加以下触发,用于捕获队员加入和离开事件:
; 队员加入队伍触发
[@GroupAddMember]
#IF
#ACT
; 将队员名字存入队长变量
MOV S0 <$USERNAME>
; 标记该队员为“已组队”状态(使用A变量)
CALCVAR HUMAN A99 + 1
SAVEVAR HUMAN A99 ..\QuestDiary\防跑单\队员状态.txt
SENDMSG 5 “玩家【<$USERNAME>】已加入队伍,防跑单机制已开启。”
; 队员离开队伍触发(包括被踢和主动离队)
[@GroupDelMember]
#IF
#ACT
MOV S0 <$USERNAME>
; 触发离队检测脚本
GOTO @防跑单_离队检测
2. 防跑单标记变量说明
• A99变量:用于标记队员是否处于“已组队”状态。A99=1表示在队,A99=0表示离队。
- S0变量:临时存储触发事件的队员名字,用于后续脚本操作。
• 文件存储:使用 SAVEVAR 将变量保存到 QuestDiary\防跑单\ 目录下,确保数据持久化。
核心脚本:离队惩罚与传送逻辑
离队检测是防跑单的关键。当队员离队时,脚本需判断其是否处于“分配锁定期”(如BOSS死亡后5分钟内)。
1. 离队检测脚本(@防跑单_离队检测)
在 QFunction-0.txt 中继续添加:
[@防跑单_离队检测]
#IF
; 检查该队员是否在BOSS死亡后离队(通过变量A98判断,A98=1表示BOSS已死)
CHECKVAR HUMAN A98 = 1
#ACT
; 执行惩罚:传送回队长身边
MAPMOVE <$TEAMMASTERMAP> <$TEAMMASTERX> <$TEAMMASTERY>
; 扣除背包物品(可选,如扣除金币10万)
TAKE 金币 100000
; 发送警告消息
SENDMSG 1 “玩家【<$USERNAME>】在BOSS分配期间离队,已被强制传回队长处并扣除金币!”
; 重置标记
CALCVAR HUMAN A98 = 0
SAVEVAR HUMAN A98 ..\QuestDiary\防跑单\分配状态.txt
BREAK
#ELSEACT
; 正常离队,无惩罚
SENDMSG 5 “玩家【<$USERNAME>】已离开队伍。”
2. BOSS死亡触发分配锁定
在BOSS怪物的爆率文件或地图触发中,添加BOSS死亡后修改队员状态的操作:
; 假设在怪物触发脚本中(如MapQuest.txt)
[@BOSS死亡]
#IF
KILLMONNAME “赤月恶魔”
#ACT
; 遍历队伍所有成员,设置“分配锁定”变量A98=1
TEAMMEMBEREXECUTE CALCVAR HUMAN A98 = 1
TEAMMEMBEREXECUTE SAVEVAR HUMAN A98 ..\QuestDiary\防跑单\分配状态.txt
; 开启5分钟计时器,超时后解除锁定
DELAYGOTO 300 @解除分配锁定
[@解除分配锁定]
#ACT
TEAMMEMBEREXECUTE CALCVAR HUMAN A98 = 0
TEAMMEMBEREXECUTE SAVEVAR HUMAN A98 ..\QuestDiary\防跑单\分配状态.txt
SENDMSG 5 “BOSS分配锁定已解除,队员可自由离队。”
进阶功能:NPC分配与确认机制
为防止队长独吞装备,可增加NPC分配系统。BOSS死亡后,队长需将装备存入NPC,队员确认后领取。
1. 分配NPC脚本示例
在 Market_Def 目录下创建NPC脚本(如 分配大师.txt):
[@main]
#if
; 检查是否为队长
ISGROUPMASTER
#act
goto @分配界面
#else
say 只有队长才能进行分配。
[@分配界面]
say 请放入BOSS掉落的装备进行分配。\
<放入装备/@放入> <确认分配/@确认>\
[@放入]
#if
checkitem “圣战戒指” 1
#act
take “圣战戒指” 1
; 将装备存入NPC临时变量
MOV S1 “圣战戒指”
say 已放入圣战戒指,请队员确认。\
[@确认]
#if
#act
; 向所有队员发送确认消息
TEAMMEMBEREXECUTE SENDMSG 5 “队长已发起分配,请前往NPC处确认领取。”
; 设置队员可领取状态
TEAMMEMBEREXECUTE CALCVAR HUMAN A97 = 1
TEAMMEMBEREXECUTE SAVEVAR HUMAN A97 ..\QuestDiary\防跑单\可领取.txt
2. 队员领取脚本
在同一NPC中添加队员领取分支:
[@领取]
#if
; 检查是否为队员且可领取
CHECKVAR HUMAN A97 = 1
#act
give <$STR(S1)> 1
CALCVAR HUMAN A97 = 0
SAVEVAR HUMAN A97 ..\QuestDiary\防跑单\可领取.txt
say 你已领取分配装备。\
#else
say 你暂无装备可领取。\
部署流程与注意事项
1. 目录准备:在 QuestDiary 下创建 防跑单 文件夹,用于存放变量文件。
2. 脚本挂载:将NPC脚本挂载到游戏内(通过 Merchant.txt 添加NPC)。
3. 变量初始化:在 QManage.txt(登录脚本)中初始化变量,防止残留:
[@Login]
#IF
#ACT
CALCVAR HUMAN A98 = 0
CALCVAR HUMAN A97 = 0
SAVEVAR HUMAN A98 ..\QuestDiary\防跑单\分配状态.txt
4. 测试要点:测试时需模拟BOSS死亡后离队场景,验证传送和扣物是否生效。注意 TEAMMEMBEREXECUTE 命令在BLUE引擎中的兼容性(部分老引擎需用循环遍历队员代替)。
此脚本通过“状态标记+离队检测”实现防跑单,核心是 @GroupDelMember 触发与 A98 分配锁变量的配合。对于GOM/GEE引擎,还可使用 GROUPMAPMOVE 命令实现全队传送,进一步限制队员乱跑。

