珍珑宝箱和抽奖宝箱在数据库结构中均使用Stdmode=48,但通过Reserved字段区分类型:Reserved=0为传统宝箱,Reserved=2为九周年宝箱,珍珑宝箱在Reserved中填写抽奖宝箱读取的文件名称。宝箱Shape值1到5分别对应檀木、紫铜、白银、赤金、黄金五种外观,Shape=6为珍珑宝箱专用外观。钥匙的Stdmode=49,其Shape值必须与宝箱的Anicount字段完全相同才能开启宝箱,钥匙的Need字段决定收费类型,0为金币、1为元宝、2为灵符、3为金刚石,NeedLevel表示具体收费数额。
传统宝箱数据库条目格式如下:檀木宝箱对应48;1;1;11;0;0;1102,其中Anicount=11与木箱钥匙的Shape值11匹配,Reserved=0表示传统宝箱。赤金宝箱对应48;4;1;44;3;0;1105,Anicount=44与赤金钥匙Shape=44匹配。珍珑宝箱的数据库条目为48;6;1;56;6;7;1697,Anicount=56与珍珑钥匙Shape=56匹配,Reserved=7表示读取编号为7的抽奖宝箱配置文件。传统宝箱的Anicount为零时每次消耗一把钥匙,不为零时按公式计算——Anicount的第几次收费转动次方,珍珑钥匙的Anicount=1表示每次转动消耗一把钥匙。
宝箱物品配置文件的存放位置由Source字段指定。传统宝箱的配置文件放在服务端Envir目录下,文件名与Source字段值一致。抽奖宝箱的配置文件由珍珑宝箱Reserved字段中的数值决定读取哪个文件,引擎会自动匹配对应编号的文件进行抽奖物品读取。配置文件格式为每行一条物品记录,依次为物品名、类型、数量、几率四个字段。类型字段区分物品在宝箱界面中的位置:0代表普通物品,至少需要配置8件;1代表填充物品,至少需要3件;2代表中间格物品,至少需要1件。传统宝箱至少需要配置12个物品,中间物品由引擎根据几率自动生成;抽奖宝箱至少需要20个物品。
几率字段的取值范围是1到65535,数字越大代表该物品被抽中的几率越小。这个数值不是百分比,而是权重值,引擎将所有参与抽奖的物品几率值求和,每个物品的中奖概率等于自身几率值除以总权重。例如天尊头盔几率为30,天尊项链几率为40,在包含多件物品的奖池中,项链的中奖概率略低于头盔。中间格物品通常设置为奖池中最稀有的奖励,几率值应设置为整个配置文件中最高数值以保证其低概率产出。经验类物品可以通过在数据库中创建一个专用物品条目来实现,例如添加一个名为经验500000的物品,玩家通过宝箱获得该物品时自动增加对应数值的经验值。
九周年宝箱的配置与传统宝箱和珍珑宝箱存在差异。从数据库层面区分:Reserved=0为旧宝箱,Reserved=1为新宝箱,Reserved=2为九周年宝箱。九周年宝箱的配置文件要求0类型物品至少8件,3类型物品需要2件。开启九周年宝箱所需钥匙数量在M2引擎的选项菜单中通过物品装备路径下的九周年宝箱选项进行设置。
脚本命令方面,双击物品打开宝箱的功能通过QFunction-0.txt实现。宝箱增加获得物品时触发@GetBoxsItemX脚本段,其中X表示当前宝箱的Shape值。例如檀木宝箱Shape=15时触发@GetBoxsItem15段。使用脚本命令开宝箱的格式为OpenDragonBox 编号,编号范围为15到24,除默认的檀木、紫铜、白银、赤金四个宝箱外,还可扩展支持6个额外宝箱。扩展宝箱的设置入口在M2引擎的查看菜单中,通过列表信息路径下的其他设置找到宝箱系统进行配置。
珍珑宝箱的抽奖机制与传统宝箱存在本质区别。传统宝箱每抽取一样宝物,留下的空格会被宝箱中候选的宝物自动填充,因此每次开启时抽中大奖的概率是相等的。珍珑宝箱在第一次开启时抽中大奖的机会为八分之一,第二次开启时如果第一次未抽中,则概率提升为七分之一,以此类推,每次未抽中都会使下一次的中奖概率逐步提升。这种递增概率机制是珍珑宝箱区别于传统宝箱的核心设计。
物品数据库中的宝箱条目还需要注意字段之间的联动关系。Anicount字段在宝箱中决定了可开启的钥匙种类,在钥匙中决定了转动宝箱所需的钥匙数量。当钥匙的Anicount不为零时,收费公式为Anicount的第几次收费转动次方,假设钥匙Anicount设置为2,第一次转动消耗1把钥匙,第二次消耗2把,第三次消耗4把,以此类推。宝箱的Source字段填写的文件名必须与Envir目录下实际存在的配置文件名称完全一致,包括文件扩展名,否则引擎无法读取物品列表导致开箱失败。
配置完成后需要重启服务端使数据库修改生效。测试时先确认宝箱和钥匙的Anicount与Shape值是否匹配,再检查配置文件中的物品名称是否与StdItems.DB中的物品名称完全一致。物品名称中任何后缀、括号或标识的偏差都会导致引擎无法识别该物品,抽奖时该条目会被跳过或导致整个配置文件读取失败。

