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

