传奇GOM引擎捡取鉴定脚本完整设置教程\(USERITEM> Attack 1 5,SetItemAttr <\)自动

来源: 作者: 点击:
GOM引擎实现捡取鉴定分为两大核心部分\(USERITEM> Attack 1 5,SetItemAttr <\)一是物品数据库配置\(USERITEM> Attack 1 5,SetItemAttr <\)开启物品捡取触发标记;二是QFunction-0.txt全局脚本\(USERITEM> Attack 1 5,SetItemAttr <\)使用[@OnPickUp]捡取触发标签编写鉴定逻辑\(USERITEM> Attack 1 5,SetItemAttr <\)角色拾取到标记物品时自动执行鉴定\(USERITEM> Attack 1 5,SetItemAttr <\)整套功能依托引擎内置拾取触发事件\(USERITEM> Attack 1 5,SetItemAttr <\)无需额外插件\(USERITEM> Attack 1 5,SetItemAttr <\)所有逻辑在服务端完成。

物品DB数据库设置\(USERITEM> Attack 1 5,SetItemAttr <\)打开物品数据库\(USERITEM> Attack 1 5,SetItemAttr <\)找到需要开启捡取鉴定的装备\(USERITEM> Attack 1 5,SetItemAttr <\)修改AniCount字段\(USERITEM> Attack 1 5,SetItemAttr <\)填写数值200\(USERITEM> Attack 1 5,SetItemAttr <\)该标记是GOM引擎固定拾取触发标记\(USERITEM> Attack 1 5,SetItemAttr <\)AniCount=200代表拾取这件物品之后\(USERITEM> Attack 1 5,SetItemAttr <\)触发QFunction-0内的[@OnPickUp]拾取事件。确认物品的StdMode、Shape字段保持原有装备类型参数不变\(USERITEM> Attack 1 5,SetItemAttr <\)只修改AniCount。如果AniCount为空或者填写其他数字\(USERITEM> Attack 1 5,SetItemAttr <\)拾取物品不会触发脚本。物品数据库修改完成\(USERITEM> Attack 1 5,SetItemAttr <\)保存数据库\(USERITEM> Attack 1 5,SetItemAttr <\)在M2控制台执行重载物品数据库命令\(USERITEM> Attack 1 5,SetItemAttr <\)不重载的话新标记不会生效。

QFunction-0.txt脚本写入[@OnPickUp]拾取事件标签\(USERITEM> Attack 1 5,SetItemAttr <\)这个标签在玩家拾取物品的瞬间触发\(USERITEM> Attack 1 5,SetItemAttr <\)拾取成功才会执行脚本\(USERITEM> Attack 1 5,SetItemAttr <\)拾取背包满导致捡取失败不会进入该标签。基础框架写法为[@OnPickUp]\(USERITEM> Attack 1 5,SetItemAttr <\)#IF用来判断拾取物品名称\(USERITEM> Attack 1 5,SetItemAttr <\)CheckItemName <$\(PICKUPITEMNAME> 物品名称\(USERITEM> Attack 1 5,SetItemAttr <\)#act执行鉴定逻辑。<\)$PICKUPITEMNAME>是GOM内置拾取变量\(USERITEM> Attack 1 5,SetItemAttr <\)代表刚刚拾取到的物品名称\(USERITEM> Attack 1 5,SetItemAttr <\)<$PICKUPITEMINDEX>为拾取物品的索引编号\(USERITEM> Attack 1 5,SetItemAttr <\)鉴定操作需要使用Take拾取物品\(USERITEM> Attack 1 5,SetItemAttr <\)再给予鉴定后的装备。

基础捡取鉴定脚本代码结构\(USERITEM> Attack 1 5,SetItemAttr <\)在QFunction-0末尾添加[@OnPickUp]\(USERITEM> Attack 1 5,SetItemAttr <\)#IF CheckItemName <$\(PICKUPITEMNAME> 屠龙\(USERITEM> Attack 1 5,SetItemAttr <\)#ACT Take <\)$PICKUPITEMNAME> 1\(USERITEM> Attack 1 5,SetItemAttr <\)Random 10\(USERITEM> Attack 1 5,SetItemAttr <\)#IF ISRANDOM 1\(USERITEM> Attack 1 5,SetItemAttr <\)Give 屠龙(极品) 1\(USERITEM> Attack 1 5,SetItemAttr <\)#ELSEACT Give 屠龙 1\(USERITEM> Attack 1 5,SetItemAttr <\)Break。Take命令作用是把刚拾取到的装备从背包移除\(USERITEM> Attack 1 5,SetItemAttr <\)因为拾取事件触发时物品已经进入背包\(USERITEM> Attack 1 5,SetItemAttr <\)必须先收回物品\(USERITEM> Attack 1 5,SetItemAttr <\)再发放鉴定之后的新装备\(USERITEM> Attack 1 5,SetItemAttr <\)实现拾取瞬间替换。Random为随机判定\(USERITEM> Attack 1 5,SetItemAttr <\)用来区分普通属性和极品属性\(USERITEM> Attack 1 5,SetItemAttr <\)可设置多条随机分支\(USERITEM> Attack 1 5,SetItemAttr <\)不同随机数值对应不同属性装备。Break命令用来终止脚本\(USERITEM> Attack 1 5,SetItemAttr <\)匹配成功之后不再继续向下判断其他物品条件。

多件装备批量捡取鉴定写法\(USERITEM> Attack 1 5,SetItemAttr <\)使用多段#IF依次匹配不同装备名称\(USERITEM> Attack 1 5,SetItemAttr <\)每一段独立判定。#IF CheckItemName <$\(PICKUPITEMNAME> 裁决\(USERITEM> Attack 1 5,SetItemAttr <\)#act Take <\)$PICKUPITEMNAME> 1\(USERITEM> Attack 1 5,SetItemAttr <\)Random 20\(USERITEM> Attack 1 5,SetItemAttr <\)#IF ISRANDOM 1..3\(USERITEM> Attack 1 5,SetItemAttr <\)Give 裁决(高攻) 1\(USERITEM> Attack 1 5,SetItemAttr <\)#ELSEACT Give 裁决 1\(USERITEM> Attack 1 5,SetItemAttr <\)Break。#IF CheckItemName <$\(PICKUPITEMNAME> 骨玉权杖\(USERITEM> Attack 1 5,SetItemAttr <\)#act Take <\)$PICKUPITEMNAME> 1\(USERITEM> Attack 1 5,SetItemAttr <\)Random 20\(USERITEM> Attack 1 5,SetItemAttr <\)#IF ISRANDOM 1..3\(USERITEM> Attack 1 5,SetItemAttr <\)Give 骨玉权杖(高魔) 1\(USERITEM> Attack 1 5,SetItemAttr <\)#ELSEACT Give 骨玉权杖 1\(USERITEM> Attack 1 5,SetItemAttr <\)Break。每一类装备单独写判断分支\(USERITEM> Attack 1 5,SetItemAttr <\)Break放在每一段#act末尾\(USERITEM> Attack 1 5,SetItemAttr <\)防止匹配到A装备之后继续执行B装备逻辑。

极品属性随机鉴定两种方案\(USERITEM> Attack 1 5,SetItemAttr <\)第一种是提前在物品数据库新建带固定极品属性的装备\(USERITEM> Attack 1 5,SetItemAttr <\)比如屠龙(极品)\(USERITEM> Attack 1 5,SetItemAttr <\)预先设置好攻击上下限\(USERITEM> Attack 1 5,SetItemAttr <\)脚本通过Random随机发放不同成品装备\(USERITEM> Attack 1 5,SetItemAttr <\)这种方式稳定性高\(USERITEM> Attack 1 5,SetItemAttr <\)不会出现属性溢出。第二种是动态附加属性\(USERITEM> Attack 1 5,SetItemAttr <\)拾取之后对当前物品直接附加属性\(USERITEM> Attack 1 5,SetItemAttr <\)使用SetItemAttr命令修改拾取物品属性\(USERITEM> Attack 1 5,SetItemAttr <\)不需要新建多个物品条目。动态属性示例\(USERITEM> Attack 1 5,SetItemAttr <\)[@OnPickUp] #IF CheckItemName <$\(PICKUPITEMNAME> 天魔神甲\(USERITEM> Attack 1 5,SetItemAttr <\)#ACT Take <\)$PICKUPITEMNAME> 1\(USERITEM> Attack 1 5,SetItemAttr <\)Give 天魔神甲 1\(USERITEM> Attack 1 5,SetItemAttr <\)SetItemAttr <$USERITEM> Attack 1 5\(USERITEM> Attack 1 5,SetItemAttr <\)SetItemAttr <$USERITEM> Defence 2 6。SetItemAttr参数分别为物品位置\(USERITEM> Attack 1 5,SetItemAttr <\)属性类型\(USERITEM> Attack 1 5,SetItemAttr <\)最小增量\(USERITEM> Attack 1 5,SetItemAttr <\)最大增量\(USERITEM> Attack 1 5,SetItemAttr <\)拾取发放装备之后直接动态刷新装备属性。动态属性模式需要注意属性上限\(USERITEM> Attack 1 5,SetItemAttr <\)不能超过引擎物品属性上限限制\(USERITEM> Attack 1 5,SetItemAttr <\)超出上限会属性失效。

捡取鉴定功能的各类限制与坑点\(USERITEM> Attack 1 5,SetItemAttr <\)AniCount标记200只对拾取到背包的物品生效\(USERITEM> Attack 1 5,SetItemAttr <\)怪物死亡直接掉落在地面不触发\(USERITEM> Attack 1 5,SetItemAttr <\)只有角色成功捡进背包才会执行[@OnPickUp]。背包空间不足\(USERITEM> Attack 1 5,SetItemAttr <\)拾取失败\(USERITEM> Attack 1 5,SetItemAttr <\)脚本不会触发。拾取宠物拾取物品\(USERITEM> Attack 1 5,SetItemAttr <\)部分GOM版本宠物捡物不会触发[@OnPickUp]\(USERITEM> Attack 1 5,SetItemAttr <\)仅角色手动拾取生效\(USERITEM> Attack 1 5,SetItemAttr <\)想要宠物拾取也鉴定\(USERITEM> Attack 1 5,SetItemAttr <\)需要在M2引擎选项内开启宠物拾取触发拾取事件选项。Take命令必须放在#act内\(USERITEM> Attack 1 5,SetItemAttr <\)拾取事件物品已经进背包\(USERITEM> Attack 1 5,SetItemAttr <\)不执行Take直接Give\(USERITEM> Attack 1 5,SetItemAttr <\)玩家背包会同时存在未鉴定装备和鉴定完成装备\(USERITEM> Attack 1 5,SetItemAttr <\)出现重复物品。

M2引擎相关设置\(USERITEM> Attack 1 5,SetItemAttr <\)打开M2-选项-功能设置-物品拾取\(USERITEM> Attack 1 5,SetItemAttr <\)确认开启拾取脚本触发事件\(USERITEM> Attack 1 5,SetItemAttr <\)关闭拾取过滤拦截。如果开启了拾取过滤\(USERITEM> Attack 1 5,SetItemAttr <\)过滤列表内的物品不会触发拾取脚本。M2内设置拾取事件延迟\(USERITEM> Attack 1 5,SetItemAttr <\)默认数值0即可\(USERITEM> Attack 1 5,SetItemAttr <\)设置延迟过高会出现鉴定延迟\(USERITEM> Attack 1 5,SetItemAttr <\)拾取装备之后等一段时间才完成鉴定。修改QFunction-0脚本后\(USERITEM> Attack 1 5,SetItemAttr <\)需要M2重载QFunction脚本\(USERITEM> Attack 1 5,SetItemAttr <\)或者重启服务端\(USERITEM> Attack 1 5,SetItemAttr <\)修改物品DB需要重载物品数据库\(USERITEM> Attack 1 5,SetItemAttr <\)两项缺一不可。

变量与内置参数说明\(USERITEM> Attack 1 5,SetItemAttr <\)<$PICKUPITEMNAME>返回拾取物品名称\(USERITEM> Attack 1 5,SetItemAttr <\)区分中英文符号\(USERITEM> Attack 1 5,SetItemAttr <\)物品名称必须和DB内完全一致\(USERITEM> Attack 1 5,SetItemAttr <\)多空格就判定失败。<$PICKUPITEMINDEX>返回拾取物品在背包的位置编号\(USERITEM> Attack 1 5,SetItemAttr <\)动态修改装备属性时可以引用这个编号定位物品。拾取事件支持SENDMSG发送提示文字\(USERITEM> Attack 1 5,SetItemAttr <\)在#act内添加SENDMSG 7 提示:拾取到<$PICKUPITEMNAME>\(USERITEM> Attack 1 5,SetItemAttr <\)正在鉴定装备属性\(USERITEM> Attack 1 5,SetItemAttr <\)玩家拾取时在屏幕弹出鉴定提示。

多分支随机鉴定扩展写法\(USERITEM> Attack 1 5,SetItemAttr <\)可以增加鉴定品质\(USERITEM> Attack 1 5,SetItemAttr <\)普通、优秀、完美三个档位\(USERITEM> Attack 1 5,SetItemAttr <\)Random 100\(USERITEM> Attack 1 5,SetItemAttr <\)ISRANDOM 1..70为普通\(USERITEM> Attack 1 5,SetItemAttr <\)71..90优秀\(USERITEM> Attack 1 5,SetItemAttr <\)91..100完美\(USERITEM> Attack 1 5,SetItemAttr <\)每个档位发放对应属性装备。还可以增加鉴定失败分支\(USERITEM> Attack 1 5,SetItemAttr <\)小概率随机判定鉴定损毁\(USERITEM> Attack 1 5,SetItemAttr <\)拾取之后直接删除装备\(USERITEM> Attack 1 5,SetItemAttr <\)实现鉴定损毁玩法。

常见故障排查\(USERITEM> Attack 1 5,SetItemAttr <\)拾取装备完全不触发鉴定\(USERITEM> Attack 1 5,SetItemAttr <\)优先检查物品AniCount是否设置为200\(USERITEM> Attack 1 5,SetItemAttr <\)M2拾取事件开关是否开启\(USERITEM> Attack 1 5,SetItemAttr <\)QFunction脚本是否重载。拾取后背包出现两件装备\(USERITEM> Attack 1 5,SetItemAttr <\)是没有写Take命令\(USERITEM> Attack 1 5,SetItemAttr <\)拾取物品没有收回\(USERITEM> Attack 1 5,SetItemAttr <\)直接Give新装备。鉴定属性不生效\(USERITEM> Attack 1 5,SetItemAttr <\)动态SetItemAttr属性数值超出DB物品上限\(USERITEM> Attack 1 5,SetItemAttr <\)或者命令参数顺序书写错误。部分装备鉴定生效\(USERITEM> Attack 1 5,SetItemAttr <\)部分装备不生效\(USERITEM> Attack 1 5,SetItemAttr <\)核对物品名称是否完全匹配\(USERITEM> Attack 1 5,SetItemAttr <\)DB内装备名称多余空格会造成CheckItemName判断失败。宠物捡物不鉴定\(USERITEM> Attack 1 5,SetItemAttr <\)进入M2拾取设置\(USERITEM> Attack 1 5,SetItemAttr <\)勾选宠物拾取触发拾取事件\(USERITEM> Attack 1 5,SetItemAttr <\)部分旧GOM内核不支持宠物拾取触发\(USERITEM> Attack 1 5,SetItemAttr <\)只能角色拾取触发。脚本内标点符号必须使用英文半角\(USERITEM> Attack 1 5,SetItemAttr <\)中文全角逗号、括号会造成整段脚本解析失败\(USERITEM> Attack 1 5,SetItemAttr <\)M2日志可以查看QFunction加载报错\(USERITEM> Attack 1 5,SetItemAttr <\)定位语法错误。