单机传奇特殊修理NPC无法识别装备物品配置检查与修复完整步骤

来源: 作者: 点击:
特殊修理和普通修理逻辑不一样,普通修理只判断物品是否可以修复,特殊修理需要在对应配置文件内标记物品支持特殊修理,没有标记的装备放到修理栏不会被读取,NPC不会执行修理流程。首先找到服务端Mir200\Envir目录下的Items.txt物品数据库文本,部分引擎直接读取DB数据库,使用DBC工具打开StdItems.DB,找到对应装备记录,查看特殊修理标记字段,字段名称一般为SpecRepair,对应数值设置为1代表开启支持特殊修理,数值0代表不支持。修改之后保存数据库,关闭M2全部服务再重新启动,数据库改动需要重启引擎加载。

打开NPC脚本文件,找到特殊修理对应的NPC脚本,核对脚本里面的拾取判断命令,很多特殊修理脚本写了物品类型过滤,只允许首饰、武器、衣服其中一类进行修理,不在筛选范围内的装备直接跳过识别。脚本内常用判断语句包含CHECKITEMTYPE、CHECKNAMELIST,限制物品类型列表,如果需要全类型装备都可以特殊修理,删除类型过滤代码,保留扣除金币和修复耐久的执行代码。脚本内物品过滤名单如果单独写在外部txt文档,打开对应的名单文件,确认装备名称录入无误,名称必须和数据库内物品名字完全匹配,多一个空格或者错字都会识别失败。

耐久字段配置错误也会造成识别异常,StdItems.DB里面的MaxDur字段是装备最大耐久,Dur字段是当前耐久,没有设置最大耐久的物品本身不存在耐久属性,特殊修理功能不会扫描这类物品。新添加的装备忘记填写耐久参数,放到修理界面不会有响应,把对应装备的最大耐久设置合理数值,同时确认装备的CanRepair修理标记为1,基础修理开关关闭时,特殊修理同步失效。部分引擎区分普通修理标记和特殊修理标记,单独开启基础修理标记,没有开启特殊修理标记,NPC依旧无法识别。

测试的时候区分物品摆放位置,部分老旧引擎特殊修理脚本只读取NPC对话框第一个格子,装备放在其他格子不会触发识别,脚本没有循环读取全部格子的代码。打开脚本查看物品读取逻辑,如果只读取0号格子,增加循环读取多个格子的代码,或者更换适配多格子读取的特殊修理脚本。还有脚本增加了物品绑定判断,绑定物品、时效物品、活动道具被脚本拦截,直接跳过修理判定,找到脚本内CHECKBOUND判断语句,注释掉该段代码,绑定装备就可以正常被识别修理。

M2引擎选项内有物品功能控制,打开M2选项菜单找到物品参数设置,查看是否开启禁止特殊修理的全局开关,全局开关开启之后,所有装备无视数据库标记,全部无法使用特殊修理。还有版本带有物品功能插件,插件面板里面单独控制各类装备修理权限,插件优先级高于DB和NPC脚本,修改数据库标记不会生效,需要在插件面板调整特殊修理权限。

修改脚本完成之后,优先使用引擎重载NPC脚本功能,重载之后进入游戏测试,重载功能无效就关闭整套服务端重新启动。测试选用不同类型装备,武器、衣服、首饰依次放入修理框,判断是单一装备识别失败还是全部装备识别失败。单一件装备识别失败,优先核对DB内耐久、特殊修理标记、物品名称;全部装备都识别失败,优先排查NPC脚本过滤代码、全局功能开关、插件拦截。

还有一类容易忽略的情况,装备属于套装或者自定义变体物品,名称带有颜色代码,脚本读取的时候连带颜色符号一起识别,和名单内纯文字名称对不上。在脚本里面增加去除颜色码的处理指令,读取物品名称的时候过滤掉颜色控制符号,才能正常匹配名单。修理消耗金币参数错误不会影响识别,只会出现修理之后不扣金币或者扣金币不恢复耐久,和识别问题分开排查,不要混淆故障现象。