组队本身不是脚本建的,是游戏里点“组队”按钮成的。脚本要做的是:两人组队后,把队员传到队长身边,或者进副本时整队拉进同一坐标。分三种写法:队员跟队长、队长拉全队、进图时整队同坐标。
一、队员自动传送到队长身边
GOM/GEE类,在QFunction或定时脚本里写:
[@组队跟随]
#IF
IsInGroup
#ACT
;扔长地图/坐标
GetLeaderMap<$LEADERMAP>
GetLeaderX<$LEADERX>
GetLeaderY<$LEADERY>
;自己不是队长才传
CheckNotLeader
#ACT
MapMove<$LEADERMAP><$LEADERX><$LEADERY>
队员每几秒跑一次这段,就能一直贴着队长。队长不传自己,避免死循环。
HERO用lua:
functionGroupFollow(Human)
ifnotHuman:IsInGroup()thenreturnend
ifHuman:IsLeader()thenreturnend
localleader=Human:GetLeader()
ifleaderthen
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>330332
CalcInt($H(队员计数))+1
#GOTO[@拉人循环]
#ELSEACT
#SAY
全队已拉到你身边。
MapMoveToPlayer目标参照玩家XY意思是:把“目标”传到“参照玩家”附近X/Y偏移位置。队长自己当参照,全队聚到330332周围。
三、进副本/活动图时整队同坐标
最常用:队长点NPC进图,脚本把全队一起Move到副本入口周围。
[@进入火龙副本]
#IF
IsLeader
CheckGroupMemberCount>=2
#ACT
;先传队长
MapMove1005050
;再拉队员到队长旁边
SetInt($H(序号))=0
[@进图拉队]
#IF
CheckInt($H(序号))<GroupMemberCount
#ACT
GetGroupMember<$H(序号)>$H(队员)
CheckNotSelf<$H(队员)
#ACT
MapMoveToPlayer<$H(队员)><$CURPLAYER>5250
CalcInt($H(序号))+1
#GOTO[@进图拉队]
#ELSEACT
SENDMSG0队伍已进入火龙副本!
队员点同一个NPC时不让他单独进:
#IF
IsInGroup
CheckNotLeader
#ACT
#SAY
等队长开图,你会被自动拉进去。
四、组队条件判断命令
IsInGroup是否在队伍
IsLeader是否是队长
CheckGroupMemberCount>=2队伍人数>=2
GetGroupMember索引$H(x)取第N个队员对象
GroupMemberCount队伍人数变量
GetLeaderMap/X/Y扔长位置
MapMoveToPlayerABXY把A传到B身边偏移XY
老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:
;组队管理员33303305组队管理员
[@main]
#SAY
<队长:全队进火龙副本/@进副本>\<队员:跟紧队长/@无>\<离开/@exit>
[@进副本]
#IF
IsLeader
#ACT
MapMove1005050
SetInt($H(序号))=0
#CALL[\系统\拉队.txt]@拉队
#ELSEACT
#SAY
只有队长能开图。
[@无]
#ACT
#SAY
乖乖跟队长就行。
\系统\拉队.txt:
[@拉队]
#IF
CheckInt($H(序号))<GroupMemberCount
#ACT
GetGroupMember<$H(序号)>$H(队员)
CheckNotSelf<$H(队员)
#ACT
MapMoveToPlayer<$H(队员)><$CURPLAYER>5250
CalcInt($H(序号))+1
#GOTO[@拉队]
#ELSEACT
SENDMSG0全队已进火龙副本(10050附近)
队员不用点任何东西,队长一开图,全队被拉到100图5250周围,两个号自然在一起。
九、要“组队瞬间自动传一起”
在QFunction里挂组队成功事件(部分引擎是[@GroupJoin]):
[@GroupJoin]
#IF
CheckNotLeader
#ACT
GetLeaderMap<$LEADERMAP>
GetLeaderX<$LEADERX>
GetLeaderY<$LEADERY>
MapMove<$LEADERMAP><$LEADERX><$LEADERY>
A点“组队”通过,B一同意,立刻被传去A身边。队长不写这段,避免互传。
十、跨线/微端补充
单线GetGroupMember只能拿到本线队员。多线要在中心服维护“组队关系表”,队长开图时:
1.中心服查该队所有成员所在线
2.给各线发PULL_GROUP队长名地图100X50Y50
3.各线收到后对本线队员执行MapMoveToPlayer
不这么搞,A线队长拉人,B线队员永远不动,表现就是“组了队但另一个号传不过来”。
组队脚本核心就一句:队长不动/进图,队员用GetLeader/GetGroupMember拿到锚点,再MapMove或MapMoveToPlayer贴上去;队长别传自己,队员别和队长互传,副本入口别写墙里,跨线要走中心服广播。能跑通“队长进火龙→队员自动贴过来”这条,组队同屏就算成了。
一、队员自动传送到队长身边
GOM/GEE类,在QFunction或定时脚本里写:
[@组队跟随]
#IF
IsInGroup
#ACT
;扔长地图/坐标
GetLeaderMap<$LEADERMAP>
GetLeaderX<$LEADERX>
GetLeaderY<$LEADERY>
;自己不是队长才传
CheckNotLeader
#ACT
MapMove<$LEADERMAP><$LEADERX><$LEADERY>
队员每几秒跑一次这段,就能一直贴着队长。队长不传自己,避免死循环。
HERO用lua:
functionGroupFollow(Human)
ifnotHuman:IsInGroup()thenreturnend
ifHuman:IsLeader()thenreturnend
localleader=Human:GetLeader()
ifleaderthen
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>330332
CalcInt($H(队员计数))+1
#GOTO[@拉人循环]
#ELSEACT
#SAY
全队已拉到你身边。
MapMoveToPlayer目标参照玩家XY意思是:把“目标”传到“参照玩家”附近X/Y偏移位置。队长自己当参照,全队聚到330332周围。
三、进副本/活动图时整队同坐标
最常用:队长点NPC进图,脚本把全队一起Move到副本入口周围。
[@进入火龙副本]
#IF
IsLeader
CheckGroupMemberCount>=2
#ACT
;先传队长
MapMove1005050
;再拉队员到队长旁边
SetInt($H(序号))=0
[@进图拉队]
#IF
CheckInt($H(序号))<GroupMemberCount
#ACT
GetGroupMember<$H(序号)>$H(队员)
CheckNotSelf<$H(队员)
#ACT
MapMoveToPlayer<$H(队员)><$CURPLAYER>5250
CalcInt($H(序号))+1
#GOTO[@进图拉队]
#ELSEACT
SENDMSG0队伍已进入火龙副本!
队员点同一个NPC时不让他单独进:
#IF
IsInGroup
CheckNotLeader
#ACT
#SAY
等队长开图,你会被自动拉进去。
四、组队条件判断命令
IsInGroup是否在队伍
IsLeader是否是队长
CheckGroupMemberCount>=2队伍人数>=2
GetGroupMember索引$H(x)取第N个队员对象
GroupMemberCount队伍人数变量
GetLeaderMap/X/Y扔长位置
MapMoveToPlayerABXY把A传到B身边偏移XY
老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:
;组队管理员33303305组队管理员
[@main]
#SAY
<队长:全队进火龙副本/@进副本>\<队员:跟紧队长/@无>\<离开/@exit>
[@进副本]
#IF
IsLeader
#ACT
MapMove1005050
SetInt($H(序号))=0
#CALL[\系统\拉队.txt]@拉队
#ELSEACT
#SAY
只有队长能开图。
[@无]
#ACT
#SAY
乖乖跟队长就行。
\系统\拉队.txt:
[@拉队]
#IF
CheckInt($H(序号))<GroupMemberCount
#ACT
GetGroupMember<$H(序号)>$H(队员)
CheckNotSelf<$H(队员)
#ACT
MapMoveToPlayer<$H(队员)><$CURPLAYER>5250
CalcInt($H(序号))+1
#GOTO[@拉队]
#ELSEACT
SENDMSG0全队已进火龙副本(10050附近)
队员不用点任何东西,队长一开图,全队被拉到100图5250周围,两个号自然在一起。
九、要“组队瞬间自动传一起”
在QFunction里挂组队成功事件(部分引擎是[@GroupJoin]):
[@GroupJoin]
#IF
CheckNotLeader
#ACT
GetLeaderMap<$LEADERMAP>
GetLeaderX<$LEADERX>
GetLeaderY<$LEADERY>
MapMove<$LEADERMAP><$LEADERX><$LEADERY>
A点“组队”通过,B一同意,立刻被传去A身边。队长不写这段,避免互传。
十、跨线/微端补充
单线GetGroupMember只能拿到本线队员。多线要在中心服维护“组队关系表”,队长开图时:
1.中心服查该队所有成员所在线
2.给各线发PULL_GROUP队长名地图100X50Y50
3.各线收到后对本线队员执行MapMoveToPlayer
不这么搞,A线队长拉人,B线队员永远不动,表现就是“组了队但另一个号传不过来”。
组队脚本核心就一句:队长不动/进图,队员用GetLeader/GetGroupMember拿到锚点,再MapMove或MapMoveToPlayer贴上去;队长别传自己,队员别和队长互传,副本入口别写墙里,跨线要走中心服广播。能跑通“队长进火龙→队员自动贴过来”这条,组队同屏就算成了。

