组队本身不是脚本建的,是游戏里点“组队”按钮成的。脚本要做的是:两人组队后,把队员传到队长身边,或者进副本时整队拉进同一坐标。分三种写法:队员跟队长、队长拉全队、进图时整队同坐标。
一、队员自动传送到队长身边
GOM/GEE 类,在 QFunction 或定时脚本里写:
[@组队跟随]
#IF
IsInGroup
#ACT
; 取队长地图/坐标
GetLeaderMap <$LEADERMAP>
GetLeaderX <$LEADERX>
GetLeaderY <$LEADERY>
; 自己不是队长才传
CheckNotLeader
#ACT
MapMove <$LEADERMAP> <$LEADERX> <$LEADERY>
队员每几秒跑一次这段,就能一直贴着队长。队长不传自己,避免死循环。
HERO 用 lua:
function GroupFollow(Human)
if not Human:IsInGroup() then return end
if Human:IsLeader() then return end
local leader = Human:GetLeader()
if leader then
Human:MapMove(leader:GetMap(), leader:GetX(), leader:GetY())
end
end
二、队长一键把全队拉过来
NPC 里队长点“集合”:
[@队伍集合]
#IF
IsLeader
#ACT
; 遍历队伍成员,最多 5 人(含队长)
SetInt($H(队员计数)) = 0
[@拉人循环]
#IF
CheckInt($H(队员计数)) < GroupMemberCount
#ACT
GetGroupMember <$H(队员计数)> $H(队员)
; 跳过自己
CheckNotSelf <$H(队员)
#ACT
MapMoveToPlayer <$H(队员)> <$CURPLAYER> 330 332
CalcInt($H(队员计数)) + 1
#GOTO [@拉人循环]
#ELSEACT
#SAY
全队已拉到你身边。
MapMoveToPlayer 目标 参照玩家 X Y 意思是:把“目标”传到“参照玩家”附近 X/Y 偏移位置。队长自己当参照,全队聚到 330,332 周围。
三、进副本/活动图时整队同坐标
最常用:队长点 NPC 进图,脚本把全队一起 Move 到副本入口周围。
[@进入火龙副本]
#IF
IsLeader
CheckGroupMemberCount >= 2
#ACT
; 先传队长
MapMove 100 50 50
; 再拉队员到队长旁边
SetInt($H(序号)) = 0
[@进图拉队]
#IF
CheckInt($H(序号)) < GroupMemberCount
#ACT
GetGroupMember <$H(序号)> $H(队员)
CheckNotSelf <$H(队员)
#ACT
MapMoveToPlayer <$H(队员)> <$CURPLAYER> 52 50
CalcInt($H(序号)) + 1
#GOTO [@进图拉队]
#ELSEACT
SENDMSG 0 队伍已进入火龙副本!
队员点同一个 NPC 时不让他单独进:
#IF
IsInGroup
CheckNotLeader
#ACT
#SAY
等队长开图,你会被自动拉进去。
四、组队条件判断命令
IsInGroup 是否在队伍
IsLeader 是否是队长
CheckGroupMemberCount >= 2 队伍人数>=2
GetGroupMember 索引 $H(x) 取第N个队员对象
GroupMemberCount 队伍人数变量
GetLeaderMap / X / Y 取队长位置
MapMoveToPlayer A B X Y 把A传到B身边偏移X,Y
老 LEG 没有 MapMoveToPlayer,就用:
GetLeaderMap $M
GetLeaderX $X
GetLeaderY $Y
MapMove $M $X $Y
但 LEG 里取队员对象命令少,通常只能“队员主动跟队长”,不能“队长拉队员”。要做拉人,得用 Robot 遍历在线玩家再判 IsInGroup + 同队。
五、Robot 定时器做持续同屏(挂机不脱队)
Robot.txt:
0:05 执行 @组队同屏
QuestDiary\系统\组队同屏.txt:
[@组队同屏]
#IF
IsInGroup
CheckNotLeader
#ACT
GetLeaderMap <$LEADERMAP>
GetLeaderX <$LEADERX>
GetLeaderY <$LEADERY>
MapMove <$LEADERMAP> <$LEADERX> <$LEADERY>
每 5 秒队员贴一次队长,打祖玛、火龙、赤月不会掉队。队长跑图,队员自动跟。
六、英雄/夫妻/行会不算组队
• 英雄是主号附属,不算 GroupMember
• 夫妻系统是 Relation,不是组队
- 行会是大群体,IsInGroup 不认行会成员
组队只认“点组队按钮成的 2~5 人小队”,脚本里 IsInGroup / IsLeader / GetGroupMember 这一套才管用。
七、常见写错
- 队员和队长都执行 MapMove 到对方 → 互传死循环,卡坐标
• 队长也进“拉人循环”把自己 MapMove 到自己 → 闪现卡墙
• 副本入口坐标写墙里 → 传进去卡死掉血
• 组队人数判错:写 CheckGroupMemberCount = 2,三人队进不来
• LEG 引擎硬抄 GOM 的 MapMoveToPlayer → 命令不存在,整段跳过
• 队员在安全区、队长在危险图,MapMove 被“禁止传送”地图参数拦了
• 跨线组队:A 线队长、B 线队员,单线脚本拉不到,要中心服广播
八、最小可跑版本(GOM)
NPC:
;组队管理员 3 330 330 5 组队管理员
[@main]
#SAY
<队长:全队进火龙副本/@进副本>\ <队员:跟紧队长/@无>\ <离开/@exit>
[@进副本]
#IF
IsLeader
#ACT
MapMove 100 50 50
SetInt($H(序号)) = 0
#CALL [\系统\拉队.txt] @拉队
#ELSEACT
#SAY
只有队长能开图。
[@无]
#ACT
#SAY
乖乖跟队长就行。
\系统\拉队.txt:
[@拉队]
#IF
CheckInt($H(序号)) < GroupMemberCount
#ACT
GetGroupMember <$H(序号)> $H(队员)
CheckNotSelf <$H(队员)
#ACT
MapMoveToPlayer <$H(队员)> <$CURPLAYER> 52 50
CalcInt($H(序号)) + 1
#GOTO [@拉队]
#ELSEACT
SENDMSG 0 全队已进火龙副本(100,50 附近)
队员不用点任何东西,队长一开图,全队被拉到 100 图 52,50 周围,两个号自然在一起。
九、要“组队瞬间自动传一起”
在 QFunction 里挂组队成功事件(部分引擎是 [@GroupJoin]):
[@GroupJoin]
#IF
CheckNotLeader
#ACT
GetLeaderMap <$LEADERMAP>
GetLeaderX <$LEADERX>
GetLeaderY <$LEADERY>
MapMove <$LEADERMAP> <$LEADERX> <$LEADERY>
A 点“组队”通过,B 一同意,立刻被传去 A 身边。队长不写这段,避免互传。
十、跨线/微端补充
单线 GetGroupMember 只能拿到本线队员。多线要在中心服维护“组队关系表”,队长开图时:
1. 中心服查该队所有成员所在线
2. 给各线发 PULL_GROUP 队长名 地图 100 X50 Y50
3. 各线收到后对本线队员执行 MapMoveToPlayer
不这么搞,A 线队长拉人,B 线队员永远不动,表现就是“组了队但另一个号传不过来”。
组队脚本核心就一句:队长不动/进图,队员用 GetLeader / GetGroupMember 拿到锚点,再 MapMove 或 MapMoveToPlayer 贴上去;队长别传自己,队员别和队长互传,副本入口别写墙里,跨线要走中心服广播。能跑通“队长进火龙→队员自动贴过来”这条,组队同屏就算成了。

