传奇脚本里没有一条通用命令能直接读取“当前队伍人数”。不同引擎处理方式不同,GOM/GEE等较新引擎可以通过组队触发事件配合变量统计人数;老版本HERO、BLUE、3K等引擎通常只能判断是否在队伍中,不能直接精确获取队伍成员数量。
GOM/GEE引擎获取组队人数
GOM/GEE引擎在QFunction-0.txt里提供组队触发标签。创建队伍、加入队员、退出队伍时都会触发对应段落,可以用变量记录人数。
常用触发标签如下:
[@StartGroup] 准备组队时触发,可用于判断是否允许组队。
[@GroupCreate] 队伍创建成功时触发,队员名字会放入队长S0变量。
[@GroupAddMember] 有队员加入时触发,新队员名字放入队长S0变量。
[@GroupDelMember] 队员被移除时触发,被移除队员名字放入队长S0变量。
[@LeaveGroup] 玩家退出队伍时触发。
统计队伍人数的思路是:创建队伍时把人数设为1;每加入一名队员,人数变量加1;每移除或退出一名队员,人数变量减1。这样队长和队员都能通过变量知道当前队伍人数。
示例写法:
[@GroupCreate]
IF
ACT
MOV D0 1
SENDMSG 5 队伍已创建,当前人数:1
[@GroupAddMember]
IF
ACT
INC D0 1
SENDMSG 5 <STR(S0)>加入队伍,当前人数:<STR(D0)>
[@GroupDelMember]
IF
ACT
DEC D0 1
SENDMSG 5 <STR(S0)>离开队伍,当前人数:<STR(D0)>
[@LeaveGroup]
IF
ACT
MOV D0 0
SENDMSG 5 你已退出队伍
这里D0是私人数字变量,适合做临时人数统计。如果需要队伍人数在队员之间同步,可以改用全局变量或自定义变量,例如G变量或HUMAN自定义变量,但要注意多队员同时加减时可能出现重复计数。
判断队伍人数上限
统计出人数后,可以在NPC或活动脚本里判断队伍是否满足条件。
示例:
[@CheckGroup]
IF
EQUAL D0 5
ACT
SENDMSG 5 队伍已满5人,可以进入副本
ELSESAY
当前队伍人数不足5人,无法进入
如果引擎支持LARGE、SMALL,也可以写成:
IF
LARGE D0 4
ACT
goto @GroupFull
这样适合做五人副本、三人小队、双人任务等人数限制。
老版本HERO/BLEUE/3K引擎的处理方式
老版本引擎通常没有稳定的“获取队伍人数”命令。能用的多是判断是否在队伍中,例如CHECKGROUP。但CHECKGROUP只能判断玩家是否处于组队状态,不能直接返回队伍里具体有几个人。
如果老版本引擎没有提供组队人数变量,只能通过间接方式处理。第一种是在组队NPC处记录人数,玩家通过NPC组队时由脚本计数。第二种是在进入活动地图前要求队长带队员到NPC处登记,由脚本统计人数。第三种是用列表文件记录队员名字,进入时逐个校验。
间接统计的缺点是玩家如果通过游戏自带组队功能组队,脚本可能无法感知,人数就会不准。因此老版本引擎更适合在固定NPC组队、固定活动入口的场景下使用人数统计。
组队人数与地图人数不要混淆
CHECKHUM是检测指定地图的玩家数量,不是检测队伍人数。例如:
CHECKHUM 3 5
这条命令表示地图3内有5名玩家,并不代表当前队伍有5人。做队伍人数限制时不能用CHECKHUM代替组队人数判断。
队员名字获取
在GOM/GEE引擎的组队触发事件中,S0变量通常存放相关队员名字。创建队伍、添加队员、移除队员时,都可以用<$STR(S0)>显示对应玩家名。但S0只表示当前触发事件中的队员名字,不能直接当作完整队员列表使用。如果需要完整队员名单,仍需自行维护列表变量或文件。
组队人数统计注意事项
第一,人数变量必须由队长统一维护,避免队员各自加减导致数值不一致。第二,队员掉线、被踢、换线、退队时都要及时减人数。第三,队伍解散后要把人数变量归零。第四,跨服队伍、活动临时队伍、自动组队可能不会触发常规组队事件,需要单独测试。第五,修改QFunction-0.txt后必须在M2控制台重新加载脚本,否则不会生效。
实际使用时,GOM/GEE引擎优先用[@GroupCreate]、[@GroupAddMember]、[@GroupDelMember]、[@LeaveGroup]配合变量统计;老版本引擎如果没有对应触发,就只能用CHECKGROUP判断是否在队伍中,再通过NPC登记或活动入口间接统计人数。
传奇获取组队成员数量脚本命令:GOM引擎变量统计法与多引擎组队检测完整方案
来源:
作者:
点击:

