当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇组队双人同屏:组队后传一起的脚本

热度:
组队本身不是脚本建的,是游戏里点“组队”按钮成的。脚本要做的是:两人组队后,把队员传到队长身边,或者进副本时整队拉进同一坐标。分三种写法:队员跟队长、队长拉全队、进图时整队同坐标。

一、队员自动传送到队长身边

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贴上去;队长别传自己,队员别和队长互传,副本入口别写墙里,跨线要走中心服广播。能跑通“队长进火龙→队员自动贴过来”这条,组队同屏就算成了。
[顶部]