传奇怪物零爆率与药品双击不解包全链路排查:MonItems爆率文件、StdItems药物参数、QF

来源: 作者: 点击:
怪物不爆东西先查Mir200\Envir\MonItems目录。每个怪物对应一个TXT,文件名必须和Monster.DB里的怪物名称完全一致,含空格、数字、符号都不能改。例如怪物库写“沃玛教主2”,爆率文件就必须叫“沃玛教主2.txt”;库里写“白野猪”,文件写“白野猪.txt”。改过怪物名但没改爆率文件名,引擎找不到对应文本,击杀后什么都不掉。 文件内容用“1/分母 物品名 数量”格式,1/1表示必爆,1/50表示五十分之一,1/500表示五百分之一;分母越小爆率越高。普通小怪药水可写1/20、1/50,BOSS装备写1/100到1/500,极品写1/1000以上。分隔符必须英文空格,中文空格、全角斜杠、制表符混用都会导致整行不生效。 改完在M2点“控制-重新加载-怪物爆率”,GOM/GEE/部分Hero支持热重载;老引擎没有重载菜单就整体重启DBServer、M2Server、Gate。也可用@reloadmonitems或对应引擎重载命令,重载后看M2日志是否提示加载MonItems成功。

全局倍率不开放也会表现为“有文件但不爆”。打开Mir200\!Setup.txt,查MonDropRate或MonsterDropRate,正常值1表示原生倍率,0表示全服不掉落,改高如3、5即全局三倍五倍;部分引擎该参数名是GlobalDropRate,逻辑一样。 M2选项-参数设置-游戏选项-环境设置里若有“怪物爆率倍数/物品掉落倍率”,默认1,调2即全体双倍,确定后部分版本即时生效、部分需重载。若下载版带了爆率锁定,查Config\ServerConfig.txt的LockDropRate,值为1时手动改MonItems无效,改成0再重启。

物品库自身要允许掉落。用DBC2000或引擎物品编辑器打开StdItems.DB,查红药、金创药、魔法药等目标物品,DropAble或可掉落字段应为1;若为0,无论怪物爆率怎么写都不掉。 爆率文件里的物品名必须和StdItems的Name完全一致,写“小金疮药”而库里是“金疮药(小)”就不会出东西。 新加自定义药要先在StdItems建记录,再写进MonItems,否则引擎校验物品不存在会直接跳过掉落。

人形怪、精英怪、使用装备的怪物还要查MonUseItems目录。路径Mir200\Envir\MonUseItems,文件名同样按怪物名匹配,里面按普通爆率文本写装备、药水;只改MonItems不改建人形装备目录,人形怪可能空爆。 若M2或地图规则开了禁爆,查两处:QuestDiary全目录搜索CLEARMONITEM、SetNoDrop、NoDrop、禁爆等命令,活动脚本若挂了无掉落规则会全局屏蔽; M2地图设置查目标地图“禁止怪物掉落/屏蔽物品掉落”,部分版本MapInfo可挂类似规则,勾上后整图不爆。 另外查Mir200\Envir\MonDropLimitList.txt,若目标怪被设掉落数量0,也会表现为不爆,默认一般5到10,按需要恢复。

怪物数据库侧再核BURST或爆率关联字段。部分引擎Monster.DB里BURST填对应爆率文件名(不带txt)或留空按文件名匹配,填0会屏蔽;是否掉落字段应为1,掉落等级限制过高也会导致低等级测试号看不到东西,排查期可临时设0再测。 合击版还需查英雄掉落归属、ComboSkill.ini里DropOwner类参数,归属判断错误会造成“怪死了地面没物”的假象。 最后确认服务端目录权限,Windows下MonItems、StdItems、QFunction所在文件夹给当前运行用户读取写入;杀软把MonItems或M2Server拦截也会让爆率文件读不到,把整个Mir200加白名单。

药物无法解包分服务端逻辑和解压显示两块。普通回血回蓝药在StdItems按药品建:StdMode填0,Shape按药水外观(普通即时药可0,特定包药图标按补丁序号),Weight按大小填,DuraMax按“使用次数/持久”规则填,普通无限药可设较大值,计次药按次数填;CanUse设1,Bind按是否需要拾取绑/穿戴绑设0/1/2/3,Need和NeedLevel不限制就0。 若做“药包双击解出N个小药”,常用触发型:StdMode31,AniCount填自定义数字如10,DuraMax填1表示双击消耗1次,QFunction-0.txt写[@StdModeFunc10],里面TAKE药包、GIVE对应红蓝药、发消息。Hero/部分Blue用StdMode31+Anicount挂[@StdModeFunc数字]; 若用其他触发框架,按引擎文档把Anicount映射到标签,M2功能设置里开启QFunction脚本触发,Main.txt或脚本入口确认#include QFunction-0.txt,未开启会出现“点药消失但没给物”。

GOM类自动解包药包另有规则:药包在客户端可设自动解开,数据库药包Anicount等于它要解出的小药Shape,这样双击或自动解包时按Shape关联发放;只建药包不建内部小药、或Anicount和内部药Shape对不上,就会“点一下没反应/只扣包不给药”。 计次包药可用Source区分:Source0表示解包物品,Source1表示计次物品,次数取DuraMax,每次双击减1点持久,到0再TAKE;QFunction里用DuraChange或引擎计次命令扣持久,剩余次数用SENDMSG提示。 回城卷、金条、特殊丹不属于普通药,StdMode按引擎分别用2/18/20/21/31等,混用StdMode0会导致点击无触发。

药物解包后客户端不显示图标,按补丁问题处理。背包图标查Data\Items.pak或Items.wil,地面物品查DnItems/StateItem相关pak,传统引擎还看StateItem.wil、Hum.wil;药包自定义图标若只改了服务端StdItems的Shape,没在客户端补丁放对应帧,双击可能成功但背包显示空白或默认草药店图标。 GOM/GEE用pak时打开服务端Pak.txt,逐行核对pak路径、密码;登录器配置器PAK编辑里每行应显示密码正确,红字未找到就是密码错或文件不在路径。密码通常在pak.txt或补丁说明里,改完重新生成登录器。 客户端解压补丁保持单层:客户端根目录直接出Data、Map、Resources等,不要解成“补丁名\补丁名\Data”双层,双层会导致登录器读不到。重装纯净客户端后只解一次补丁,避免多版本pak序列号、wil编号冲突。

杀软拦截也会让“药物包能解但资源异常”。登录器、M2Server、pak解压过程常被360、火绒、Defender误删,先关实时防护再把Mir200、客户端Data、登录器目录加信任;登录器闪退缺dll就装DirectX9和VC运行库,路径不要含中文空格,纯英文如D:\MirServer、D:\MirClient最稳。 若进游戏其他装备显示正常、只有新药不显示,优先查StdItems的Shape/Looks与服务端pak序号是否对应,用WIL/PAK编辑器打开对应包看帧数和序列号;传统wil改了序列号要同步改客户端FileList或登录器资源配置,否则只显示占位图。

标准排查顺序:第一步停服,备MonItems、StdItems、QFunction-0.txt、Pak.txt;第二步MonItems按怪物名核对爆率行,1/分母、英文空格、物品名与StdItems一致;第三步!Setup.txt全局倍率设1以上,M2取消禁爆、地图取消屏蔽,MonDropLimitList不改0;第四步StdItems药包设CanUse1、按类型设StdMode,触发包设Anicount+QFunction标签,自动解包药包Anicount对齐内部药Shape;第五步M2重载怪物爆率、重载QF脚本,GOM可重载所有脚本;第六步客户端核对Items/StateItem/DnItems及pak密码路径,单层解压、加白名单;第七步建测试号,打不同怪物看地面物品,双击药包看是否扣包发药,背包不显示再换Shape和pak。若改完仍零爆,把M2启动日志里MonItems加载行、掉落失败行、QFunction触发行全部抄出来对照文件名;若只药不解包而其他触发物品正常,问题固定在StdItems的StdMode/Anicount/Source或QFunction标签名;若其他物品都显示、只有新药包空白,问题固定在客户端Shape与pak帧。按这三层隔离,不用全量重装也能定位。