副本检测命令¶
本页包含与副本(Instance)相关的检测命令。
副本状态检测¶
CheckInstance (检测副本存在)¶
检测玩家是否拥有指定地图的副本实例。
语法格式:
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| 地图编号 | int | 副本对应的地图ID |
示例:
CheckInInstance (检测在副本中)¶
检测玩家当前是否在副本地图中。
语法格式:
示例:
副本节点检测¶
CheckInstanceNode (检测副本节点)¶
检测当前副本地图的节点值是否满足指定条件。
语法格式:
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| 操作符 | string | <, <=, >, >=, ==, != |
| 节点值 | int | 要比较的节点值 |
检查逻辑:
- 获取玩家当前对话守卫所在地图或玩家当前地图的副本节点值
- 将节点值与目标值进行比较
- 返回比较结果
示例:
; 检测副本节点是否小于20(还在第一层)
#IF
CheckInstanceNode < 20
#ACT
InstanceMove 227 881 295 0
ChangeCurrentInstanceNode 20
ChangeTime 5
Break
; 检测副本节点是否已完成最后一层
#IF
CheckInstanceNode >= 90
#ACT
MOV J9 10
MOVE 147 0 0 1
Break
CheckInstanceVar (检测副本变量)¶
检测副本实例的数字变量值。
语法格式:
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| 变量索引 | int | 副本变量的索引号 |
| 比较符 | string | =, >, <, >=, <= |
| 值 | int | 要比较的值 |
示例:
队伍检测命令¶
Groupleader (检测是否队长)¶
检测玩家是否为队长。
语法格式:
逻辑说明:
- 玩家是队长 → 条件为真
- 玩家不是队长或没有队伍 → 条件为假
等价写法
GroupLeader / Groupleader / 检测队长 均可(命令大小写不敏感)。
示例:
CheckHasGroup (检测是否有队伍)¶
检测玩家是否有队伍。
语法格式:
示例:
GroupCount (检测队伍人数)¶
检测队伍人数是否满足条件。
语法格式:
示例:
替代方案
也可以使用 CheckCalc <$GROUPNUM> > 3 来检测队伍人数。
GroupCheckNearby (检测队友附近)¶
检测队伍成员是否都在当前对话 NPC 附近(9格范围内)。
语法格式:
检查逻辑:
- 获取 NPC 坐标(以对话守卫为中心)
- 遍历队伍成员
- 检查每个成员是否在 NPC 附近 9 格内
- 检查每个成员是否在同一地图
- 离线成员会导致检测失败
- 无队伍或找不到 NPC 时,直接判定失败
示例:
#IF
GroupCheckNearby
#ACT
CreateInstance 80 20 0 0 0
GroupInstanceMove 80 0 0 3
GroupGoto @扣除金币
Break
#ELSESAY
队伍成员不在附近
CheckGroupVar (检测队伍变量)¶
检测队伍所有成员的变量是否满足条件。
语法格式:
支持的变量类型:
| 变量类型 | 说明 | 示例 |
|---|---|---|
$LEVEL |
等级 | CheckGroupVar $LEVEL < 25 |
$GOLD |
金币 | CheckGroupVar $GOLD < 100000 |
$ItemNum(物品ID,数量) |
物品数量检测 | CheckGroupVar $ItemNum(90226,3) == 0 |
J变量号 |
J变量值 | CheckGroupVar J24 < 1 |
U变量号 |
U变量值 | CheckGroupVar U1 < 1 |
G变量号 |
G变量值 | CheckGroupVar G1 < 1 |
$ItemNum 说明
$ItemNum(物品ID,数量) 返回 1(有该物品)或 0(没有)。
CheckGroupVar $ItemNum(90226,3) == 0= 检测是否有队员没有3个物品90226- 如果有人没有,条件满足,执行阻止逻辑
注意事项
- J/U/G 变量不要加
%前缀,代码内部会自动添加 <$GOLD>写法无效,会被提前替换成数值导致解析失败- 变量解析失败会视为条件不成立
执行逻辑:
核心语义:检查所有队员是否都满足条件,遇到第一个不满足的就退出。
为什么需要 not?¶
当需求是"检测是否有人满足某条件"时,必须使用 not + 反向条件。
示例需求:检测队伍中是否有人已进入过副本(J24 >= 1)
| 写法 | 实际语义 | 队长J24=0, 队友J24=3 时 |
|---|---|---|
CheckGroupVar J24 > 0 |
所有人 J24 > 0 | ❌ 队长不满足就退出,漏检队友 |
not CheckGroupVar J24 < 1 |
有人 J24 >= 1 | ✅ 正确检测到队友 |
逻辑解释:
CheckGroupVar J24 < 1= 检查"所有人 J24 < 1"(没人进入过)- 如果有人 J24 >= 1,条件返回 false
not false= true,触发阻止逻辑
错误写法分析:
执行流程(队长J24=0, 队友J24=3):
- 检查队长:0 > 0 = false → 立即退出
- 队友根本没被检查 → 条件不满足 → 不执行 Break
- 结果:有人进入过但没被阻止!
正确写法:
执行流程(队长J24=0, 队友J24=3):
- 检查队长:0 < 1 = true → 继续
- 检查队友:3 < 1 = false → 退出,返回 false
not false= true → 执行 Break- 结果:正确阻止!
常用场景写法¶
; 检测队伍所有成员等级 >= 25(有人不足则阻止)
#IF
not CheckGroupVar $LEVEL >= 25
#ACT
Break
#SAY
队伍有成员等级未达到25级!
; 检测是否有人今日已进入副本(有人进入过则阻止)
#IF
not CheckGroupVar J24 < 1
#ACT
Break
#SAY
队伍中有人今天已经去过该副本了。
; 检测队伍金币(推荐使用专用命令)
#IF
not CheckGroupMemberGold >= 50000
#ACT
Break
#SAY
队伍有成员金币不到5万!
CheckGroupVarAny (检测队伍变量-有人满足)¶
检测队伍中是否有人满足条件。这是 CheckGroupVar 的简化版本,无需使用 not 反向逻辑。
语法格式:
语义对比:
| 命令 | 语义 |
|---|---|
CheckGroupVar J24 < 1 |
所有人 J24 < 1 |
CheckGroupVarAny J24 >= 1 |
有人 J24 >= 1 |
解析规则
- 队伍不存在 → 条件不成立
- 单个成员变量解析失败 → 跳过该成员继续检查
- 若所有成员都不满足(或全部解析失败)→ 条件不成立
示例:
; ✅ 直观写法:检测是否有人今日已进入副本
#IF
CheckGroupVarAny J24 >= 1
#ACT
Break
#SAY
队伍中有人今天已经去过该副本了。
; 等价于旧写法
#IF
not CheckGroupVar J24 < 1
推荐用法:
| 需求 | 推荐命令 |
|---|---|
| 有人满足条件 | CheckGroupVarAny ✅ |
| 所有人满足条件 | CheckGroupVar |
CheckGroupVarEx (检测队伍变量扩展)¶
检测队伍变量的扩展版本,支持附加条件过滤成员。
命令速览:
| 命令 | 作用 | 格式 |
|---|---|---|
CheckGroupVarEx |
检测队伍变量扩展 | CheckGroupVarEx 主变量 [操作符] [主值] 附加变量 [操作符] [附加值] |
语法格式:
通俗解释:
先用“附加条件”筛选队员,再在被筛选出来的队员里检查主条件。
只要有一个队员同时满足“附加条件 + 主条件”,就算成立。
参数说明:
| 参数 | 说明 | 示例 |
|---|---|---|
| 主变量 | 要检测的主要变量 | $GOLD / $LEVEL / $ItemNum(90226,3) / J24 |
| 主比较符 | 比较操作符 | == != > < >= <= |
| 主值 | 主变量的比较目标 | 100000 / 0 / 25 |
| 附加变量 | 用于筛选成员的变量 | J47 / U10 / G2 |
| 附加比较符 | 比较操作符 | == != > < >= <= |
| 附加值 | 附加变量的比较目标 | 0 / 1 |
执行逻辑(对应源码):
- 逐个遍历队伍成员
- 先判断“附加条件”,不满足则跳过该成员
- 只有满足附加条件的成员才检查主条件
- 只要有成员同时满足“附加条件 + 主条件” → 条件成立
- 队伍不存在或变量解析失败 → 条件不成立
- 没有任何成员满足附加条件 → 条件不成立
好处:
- 可以把“过滤人群”与“检测条件”拆开,逻辑更清晰
- 常用于:只检查“未扣费/未标记”的队员,避免重复扣除或重复校验
- 解决“某些队员已被豁免”的场景(比如 J47=1 的成员不参与检测)
变量解析失败
任一成员的变量无法解析为数字时,整条检测会失败(条件不成立)。
示例 1:排除标记成员,检查金币不足
示例 2:排除标记成员,检查入场券不足
; 检测队伍入场券不足,排除 J47 == 1 的成员
#IF
CheckGroupVarEx $ItemNum(90226,3) == 0 J47 == 0
#ACT
Break
#SAY
队伍有成员灵符不到3个!
示例 3:配合 GroupGoto 的“标记免检”流程
; 先筛选没被标记的队员,再检查金币
#IF
CheckGroupVarEx $GOLD < 100000 J47 == 0
#ACT
Break
#SAY
队伍有成员金币不足!
; 扣费后统一标记(让后续检测跳过)
[@扣金币]
#IF
#ACT
MOV J47 1
TakeGold 100000
CheckGroupMemberLevel (检测队员等级)¶
检测队伍成员等级。
语法格式:
CheckGroupMemberGold (检测队员金币)¶
检测队伍所有成员金币是否满足条件。
语法格式:
执行逻辑:
- 队伍不存在或参数解析失败 → 条件不成立
- 需要所有队员都满足比较条件才成立(与
CheckGroupVar一致)
示例:
CheckGroupMemberItem (检测队员物品)¶
检测队伍成员是否拥有指定物品。
语法格式:
CheckGroupMemberItemIdx (检测队员物品-按编号)¶
检测队伍成员是否拥有指定编号的物品。
语法格式:
完整示例¶
副本入口检测流程¶
[@进入副本]
; 检测是否队长
#IF
not Groupleader
#ACT
Break
#SAY
勇士你不是队长,请等待队长操作!
; 检测队伍人数
#IF
CheckCalc <$GROUPNUM> > 3
#ACT
Break
#SAY
队伍人数超过3人!
; 检测队伍等级(有人不足则阻止)
#IF
not CheckGroupVar $LEVEL >= 25
#ACT
Break
#SAY
队伍有成员等级未达到25级!
; 检测今日进入次数
#IF
CHECKGROUPVAR J255 == 1
#ACT
Break
#SAY
队伍中有人今天已经去过该副本了。
; 检测队伍金币
#IF
not CheckGroupMemberGold >= 50000
#ACT
Break
#SAY
队伍有成员金币不到5万!
; 检测队友是否在附近
#IF
GroupCheckNearby
#ACT
CreateInstance 72 180 1 0 0
GroupInstanceMove 72 0 0 3
GroupGoto @扣除道具
Break
#ELSESAY
队伍成员不在附近
[@扣除道具]
#IF
#ACT
MOV J255 1
TAKEITEM 副本入场券 1
九层妖塔节点检测¶
[@MAIN]
#IF
#ACT
REMOVEBUFF 58001
REMOVEBUFF 58011
; 检查是否已完成妖塔
#IF
CHECKCALC <$STR(J9)> >= 10
#ACT
MOV J0 1
MOVE 147 0 0 1
Break
; 进入第一层(节点0-19)
#IF
CHECKINSTANCENODE < 20
#ACT
INSTANCEMOVE 227 881 295 0
CHANGECURRENTINSTANCENODE 20
CHANGETIME 5
Break
; 进入第二层(节点20-29)
#IF
CHECKINSTANCENODE < 30
#ACT
INSTANCEMOVE 227 733 443 0
CHANGECURRENTINSTANCENODE 30
CHANGETIME 5
Break
; 完成最后一层
#IF
CHECKINSTANCENODE >= 90
#ACT
MOV J9 10
MOV J0 1
MOV A0 完成妖塔
MOVE 147 0 0 1
Break
相关操作命令¶
CreateInstance- 创建副本实例InstanceMove- 单人副本传送GroupInstanceMove- 组队副本传送ChangeInstanceNode- 修改指定副本节点ChangeCurrentInstanceNode- 修改当前副本节点ChangeTime- 修改副本计时GroupGoto- 队伍跳转标签