GOM引擎传奇脚本实现自动捡取与鉴定详细教程

来源: 作者: 点击:
在GOM引擎中实现角色自动捡取物品并触发鉴定功能,需结合QFunction事件、物品属性判断及NPC交互逻辑。以下步骤基于标准GOM 1.50+版本,适用于单机或内网环境。

第一步:确认物品鉴定机制
GOM引擎中,未鉴定物品通常带有“[未鉴定]”前缀,或ItemName字段包含特定标识(如“#UnIden_”)。鉴定操作一般通过与特定NPC对话完成,例如“鉴定师”。

第二步:编写捡取触发脚本
在QManage.txt中添加[@PickUp]事件,该事件在玩家拾取任意物品时触发:

[@PickUp]
IF
EQUAL [未鉴定]铁剑
ACT
set [NEED_IDENTIFY] 1
message 捡到未鉴定物品,准备前往鉴定!

注意:为GOM内置变量,表示刚捡起的物品全名。若物品名含空格或特殊符号,建议用包含判断:

IF
contain [未鉴定]
ACT
set [UNID_ITEM]
goto @go_identify

第三步:设置自动寻路至鉴定NPC
假设鉴定师位于地图3(盟重省),坐标(330,330)。在Npc_defIdentifyMaster.txt中配置:

[@main]
IF
checkitem [未鉴定]铁剑 1
ACT
take [未鉴定]铁剑 1
give 铁剑 1
message 鉴定完成,获得铁剑!
break

但自动挂机需主动触发此NPC。因此在QFunction-0.txt中加入导航逻辑:

[@go_identify]
IF
checkmap 3
ACT
goto @call_identify_npc
ELSEACT
mapmove 3 330 330
delay 2000
goto @wait_at_npc

[@wait_at_npc]
IF
checkmap 3
ACT
goto @call_identify_npc

[@call_identify_npc]
; 调用NPC对话(GOM支持直接触发)
ACT
npc_identify
set [UNID_ITEM]

第四步:创建鉴定专用NPC函数
在CustomFunc.txt(或自定义函数文件)中定义npc_identify:

[@npc_identify]
IF
checkitem [未鉴定]铁剑 1
ACT
take [未鉴定]铁剑 1
give 铁剑 1
SAY
鉴定成功!

IF
checkitem [未鉴定]魔法盾书 1
ACT
take [未鉴定]魔法盾书 1
give 魔法盾书 1

可扩展多物品判断,按优先级排列。

第五步:整合到挂机循环
若用于挂机脚本,在打怪后加入捡取检测:

[@after_attack]
delay 1000
; 此处不需手动捡取,游戏自动拾取后触发[@PickUp]
goto @next_monster

第六步:处理物品堆叠与背包满问题
GOM引擎在背包满时不会触发[@PickUp]。需提前检测空间:

IF
CHECKBAGGAGE 1
ACT
; 继续捡取
ELSEACT
message 背包已满,停止捡取未鉴定物品。
set [STOP_PICK] 1

关键注意事项:
未鉴定物品名称必须与ItemList.txt中定义完全一致,包括括号为中文字符;
GOM不支持正则匹配,多物品需逐条写IF判断;
鉴定过程不可逆,务必确保“未鉴定”与“已鉴定”物品ID不同;
若使用装备类未鉴定物品,需额外处理穿戴属性生效逻辑(通常鉴定后自动刷新属性)。

测试方法:
在地图放置[未鉴定]铁剑(可通过GM命令give);
角色走近自动捡取;
观察是否传送至鉴定师位置并完成交换;
检查背包是否出现已鉴定物品。

此方案可扩展至批量鉴定、按品质筛选(如仅鉴定绿色以上)、自动出售普通未鉴定物等场景,只需增加物品类型判断和分支跳转。