当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

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

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

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

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

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

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

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

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

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

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

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