传奇组队防跑单脚本实现方案

来源: 作者: 点击:
一、 防跑单机制设计原理

组队“跑单”指队员在打完BOSS或分装备时离队私吞物品。脚本防跑单的核心逻辑是“先押后付”:进入副本前队长缴纳押金并锁定队伍名单,通关后根据存活名单返还押金并分配奖励。全程利用个人变量与全局变量记录队伍状态,确保只有全程参与的队员才能分赃。

二、 HERO引擎核心检测命令

在编写脚本前,需掌握HERO引擎组队检测的关键命令:
- ISGROUPMASTER:检测当前人物是否为队长。
• CHECKGROUPCOUNT:检测队伍人数(含队长)。

- GROUPMAPMOVE:全队传送(用于将队伍整体传入副本)。
• AddTextListEx / GetRandomTextList:用于记录和随机抽取队员名单(分装备时使用)。

三、 实战脚本编写(以副本为例)

以下为完整的防跑单副本NPC脚本,放置于 Envir\Market_Def\ 目录下。

1. 队长缴纳押金与组队锁定

此阶段队长支付元宝作为押金,并锁定当前队伍成员名单。
[@GroupLeader]
#IF
ISGROUPMASTER
CHECKGROUPCOUNT < 2
#SAY
防跑单副本需要至少2人组队才能进入。
#ELSESAY
#IF
ISGROUPMASTER
CHECKGROUPCOUNT > 1
CHECKGAMEGOLD > 999
#ACT
; 队长缴纳1000元宝押金
GAMEGOLD - 1000
; 设置队长个人变量,标记已缴纳押金
SET [100] 1
; 清空旧名单,记录当前队伍成员(防跑单核心)
CLEARNAMELIST ..\QuestDiary\防跑单\队伍名单.txt
AddTextListEx ..\QuestDiary\防跑单\队伍名单.txt
; 全队传送至副本地图
GROUPMAPMOVE D5001 50 50
SENDMSG 6 防跑单副本已开启!全员已传送。通关后押金返还。
#ELSESAY
你的元宝不足1000,无法缴纳押金。


2. 副本通关检测与奖励发放

BOSS死亡触发脚本(通常在 QFunction-0.txt 中配置),检测队伍完整性。
[@KillBoss]
; 假设BOSS名为“祖玛教主”
#IF
KILLMONNAME 祖玛教主
CHECKGROUPCOUNT > 1
; 检查队长押金变量是否存在
CHECK [100] 1
#ACT
; 读取之前记录的队伍名单
GetRandomTextList ..\QuestDiary\防跑单\队伍名单.txt S0
; 遍历名单,给仍在队内的成员发放奖励
#CALL [..\QuestDiary\防跑单\发放奖励.txt] @GiveReward
; 返还队长押金
GAMEGOLD + 1000
SET [100] 0
SENDMSG 6 恭喜队伍通关!奖励已发放至全程参与的队员。
#ELSESAY
检测到队伍人员变动或押金异常,奖励发放失败。


3. 奖励发放子脚本

创建 ..\QuestDiary\防跑单\发放奖励.txt 文件,实现精准发放。
[@GiveReward]
#IF
; 检查当前人物是否在最初的名单中
CheckTextList ..\QuestDiary\防跑单\队伍名单.txt <$USERNAME>
; 检查当前人物是否仍在队伍中(防中途退出)
ISGROUPMASTER
#ACT
; 发放奖励(例如100万经验+1个祖玛装备)
CHANGEEXP + 1000000
GIVE 祖玛雕像 1
SENDMSG 6 你获得了通关奖励!


四、 进阶防作弊措施

1. 地图进入限制:在 MapInfo.txt 中设置副本地图为 NORECALL(禁止传送)、NODEARRECALL(禁止记忆传送),防止队员中途飞走。
2. 时间戳验证:进入副本时记录系统时间(GetRandomText..\QuestDiary\防跑单\进入时间.txt),BOSS死亡时检测时间差,防止队长在BOSS快死时踢人换小号进队。
3. 死亡检测:利用 QFunction-0.txt 中的 [@PlayDie] 标签,检测队员死亡后是否回城,若死亡后未在副本内复活,则从奖励名单中移除。

五、 常见问题排查

• 名单记录失败:检查 QuestDiary\防跑单\ 目录是否存在,且引擎有写入权限。

• 变量冲突:[100] 为个人变量,若服内其他脚本使用同一变量会导致混乱,建议使用高位变量(如 [200])。

• 人数检测BUG:CHECKGROUPCOUNT 包含队长,若脚本逻辑是“队长+2队员”,检测值应为3。

通过上述脚本,可实现“名单锁定-通关检测-名单发放”的闭环流程,有效杜绝队员中途退队或队长恶意踢人的跑单行为。