GOM引擎获取物品数量命令详解 - 指定位置检测用法
摘要:GOM引擎获取物品数量分两种位置:背包物品用GetItemsNumber按标准名读进变量,身上装备位用CHECKUSEITEM判断0到28或30到47段戴没戴装备,位上属性用GetItemAbil读出攻击、魔法、道术上下限。数包与查位不能混用,物品名写错会数到0。本文给出金条够数且武器位已穿戴才兑换的NPC脚本。…
上次在本地测试版本里写一个装备回收脚本,想判断玩家背包里是不是凑齐了10件指定材料,结果我先拿检测身上装备的命令去判断背包,条件永远不成立,脚本卡在那里半天没反应。翻了一遍帮助文档才反应过来:获取指定位置物品数量这件事,在GOM引擎里要分两种位置处理,背包里的数量和身上穿的位置,用的根本不是同一条命令。
新手最容易犯的错,就是把”包里有多少个”和”身上某个位置穿没穿装备”混为一谈。前者是数数量,后者是查空位,两条命令各管一摊。下面把GetItemsNumber、CHECKUSEITEM、GetItemAbil三条命令逐条说明,对应背包、身上位置、位置属性三个场景。

命令原型
数背包里某样东西有多少个,用GetItemsNumber 物品名称 保存变量,执行后把数量写进指定变量。这条命令只看背包包裹,不看身上穿的装备。
[@检测材料]
#IF
#ACT
GetItemsNumber 金条 N0
SENDMSG 5 当前背包金条数量:<$STR(N0)>
查身上某个装备位置穿没穿东西,用CHECKUSEITEM 物品位置,位置参数填0到28或30到47,成立说明该位置戴了装备,不成立说明是空位。
[@检查武器位]
#IF
CHECKUSEITEM 0
#SAY
武器位已经戴了装备!
#ELSESAY
武器位是空的,还没拿武器!
要把位置上那件装备的具体属性读出来,用GetItemAbil 装备位置 保存变量1到6,分别取攻击上下限、魔法上下限、道术上下限,这就是GetItemAbil装备属性读取的标准写法,加英雄前缀还能读英雄身上的装备。

参数对照
三条命令的位置含义和参数位对照如下,配置时先想清楚自己要数的是背包还是身上。
| 命令 | 参数 | 含义 |
|---|---|---|
GetItemsNumber 物品名称 变量 |
物品名称、保存变量 | 数背包里该物品的堆叠数量,结果存变量 |
CHECKUSEITEM 物品位置 |
位置0到28或30到47 | 判断身上该装备位是否戴了东西,只出成立与否 |
GetItemAbil 装备位置 变量1到6 |
位置、属性序号 | 读出该位置装备的攻击、魔法、道术上下限 |
| 英雄前缀版本 | HeroGetItemAbil ... |
读法跟人物一致,作用对象换成英雄装备 |
GetItemsNumber按物品名称匹配,名字必须和数据库里的标准名一字不差,名字写错会数到0。CHECKUSEITEM只回答有或没有,不告诉你穿的是哪件;要知道具体是哪件、属性多少,再接GetItemAbil读属性。位置序号是固定的,武器、衣服、项链、手镯、戒指各占一个编号,不能随意改。
避坑指南
拿CHECKUSEITEM去数背包数量是第一大坑。它只认身上装备位置,你传一个背包格子号进去根本没有对应关系,条件恒为假。背包里有几件,必须老老实实用GetItemsNumber数出来存变量,再拿变量和目标数量比。
物品名称对不上是第二坑。GetItemsNumber第二个参数是物品标准名,改名后的装备、加了颜色前缀的装备,按原名可能数不准;涉及改名装备,先确认数据库里的真实名称再填。
位置编号越界是第三坑。CHECKUSEITEM和GetItemAbil的位置只认0到28或30到47这一段,传48以上引擎直接不执行。写之前先确认这个编号段对应哪个装备位,别凭印象填。
只判断有没有、不读属性会误判流程。CHECKUSEITEM成立只说明位上有东西,至于是不是目标装备、属性够不够,得靠GetItemAbil把数值读出来再比,两步连起来才严谨。

实操步骤
下面做一个完整判断:检测背包里金条够不够5根,够了再看武器位是不是已经戴了武器,两件事都满足才触发后续兑换。
第一步,打开本地测试版本目录D:\本地传奇版本\Mir200\Envir\Market_Def下的兑换NPC脚本,在对话段里空出位置准备写检测。
第二步,先用GetItemsNumber把背包金条数量读进N0,再用#IF条件判断N0是否大于等于5。
[@兑换]
#IF
#ACT
GetItemsNumber 金条 N0
#IF
LARGE N0 4
#ACT
SENDMSG 5 金条数量够了,继续检查武器位!
第三步,紧接后面加一条CHECKUSEITEM 0检查武器位,成立就执行兑换,不成立提示先拿武器。
#IF
CHECKUSEITEM 0
#ACT
TAKE 金条 5
GAMEGOLD + 100000
SENDMSG 5 兑换成功!
#ELSESAY
你还没拿武器,先把武器拿上再来兑换!
第四步,保存后在M2控制台重载NPC脚本,上线分别试三种情况:金条不够、够了但空手、够了且拿着武器,看三种结果是否和脚本预期一致。
FAQ问答
1. 问:GetItemsNumber数出来的数量为什么一直是0,背包明明有这个东西?
先核对物品名称。这条命令按数据库里的物品标准名匹配,名字必须一字不差,多一个字少一个字都会数到0。其次确认你数的是背包包裹里的堆叠物品,它不数身上穿的装备。最后注意改名装备和加了颜色前缀的装备,按原名可能匹配不到,回到StdItems数据库里抄准确名称再填。
2. 问:CHECKUSEITEM检查位置和GetItemsNumber数量检测,两个命令在回收脚本里怎么分工?
回收脚本一般两步走:先GetItemsNumber 回收物品 N0 数背包里有几件,决定批量回收几件;再CHECKUSEITEM 位置判断玩家身上关键位置有没有穿目标装备,避免把身上穿着的也回收掉。前者管背包数量,后者管身上空位,谁也替代不了谁。写回收逻辑时先数包、再校验身上位置,顺序别反。(本条问题整理自百度知道真实提问:传奇设置装备回收脚本,2026-06)
3. 问:这些检测命令写在NPC对话里还是QFunction里,触发时机怎么选?
写在哪里取决于什么时候检测。玩家点NPC按钮兑换、回收,就写在对应NPC的对话段#IF里;登录时自动检查一次背包,写在QManage登录脚本;穿戴变化时触发,写在QFunction。GetItemsNumber是动作命令要放在#ACT后执行拿结果,CHECKUSEITEM是条件命令要放在#IF后做判断,两类位置别放反。(本条问题整理自百度知道真实提问:传奇gom引擎脚本命令常用命令分类,2026-07)
4. 问:GetItemAbil读出来的六个变量分别对应哪几项属性?
按帮助文档顺序,六个变量依次对应攻击上下限、魔法上下限、道术上下限。比如GetItemAbil 0 N1 N2 N3 N4 N5 N6,N1是攻击下限、N2是攻击上限、N3是魔法下限,依此类推。要判断武器攻击上限够不够,就读第二个变量和目标值比。加英雄前缀读的是英雄身上对应位置的装备。
5. 问:检测到物品数量足够后,怎么自动关掉对话框并执行后续动作?
数量够了在#ACT里直接写后续动作即可,比如扣物品、加货币、发提示。需要关对话框回到游戏主界面,用close命令结束这段对话;如果检测不够,走#ELSESAY分支提示玩家材料不足。核心是GetItemsNumber先把数量存进变量,再用EQUAL或LARGE比大小,条件成立执行、不成立给提示,整套流程就在一个对话段内完成。(本条问题整理自百度知道真实提问:传奇设置NPC回答后自动关闭脚本,2025-08)
6. 问:想批量判断背包里多种材料各有几个,要写多少条GetItemsNumber?
一种物品写一条。GetItemsNumber 物品A N1、GetItemsNumber 物品B N2,依次把每种材料的数量读进不同变量,再统一比较。引擎没有一次读多种物品数量的合并命令,材料种类多就多写几条,变量错开别复用同一个N号,否则后一条会把前一条覆盖掉。
总结
获取指定位置物品数量在GOM引擎里要分场景:背包堆叠物品用GetItemsNumber 物品名 变量数个数,身上装备位用CHECKUSEITEM 位置判断有没有穿,位上装备的具体属性用GetItemAbil 位置 变量1到6读出来。数包和查位别混用,物品名称对准确、位置编号别越界,再把数量比较和位置判断串到同一个#IF里,回收、兑换、检测类脚本就稳了。
本文背包数量检测、身上位置判断与装备属性读取相关案例已在本地GOM引擎环境逐项跑通;命令仅适配GOM引擎,部分其他引擎存在兼容可能性,跨引擎使用需要自行测试修改。仅供单机本地学习调试。
扫描二维码推送至手机访问。
本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。
本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。










