前言

制作随机附魔这种教程已经烂大街了,网上随便一搜就有,随机附魔实现的方法有MOD数据库和DBC,以及Eluna三种方式,本文大量参考网络文章(尤其是参考法号蓝灯,论坛账号wen23t的文章),我这边就拾人牙慧,尽可能的较为详细、较为清晰的介绍下数据库和DBC方式吧!

本文所需的工具为:

  • Navicat,连接数据库用;
  • MPQEditor(提取码:3q32),制作客户端补丁用;
  • MyDbcEditor(提取码:qqi2)或WDBX Editor工具(提取码:qkn1),编辑dbc文件用。

原理介绍

如图所示,简单说下逻辑关系:

  1. item_template表对应item_enchantment_template表数值;
  2. item_enchantment_template表对应ItemRandomProperties.dbc或者ItemRandomSuffix.dbc文件数值;
  3. ItemRandomProperties.dbc或者ItemRandomSuffix.dbc文件对应SpellItemEnchantment.dbc文件数值;
  4. SpellItemEnchantment.dbc文件分别对应Spell.dbcItemVisuals.dbcSkillLine.dbc文件数值。

有点复杂,上图我分了五个层次,我将分别介绍:

第一层

item_template表内,有两种随机附魔方式,分别是:

  1. 固定数值的随机附魔:RandomPropery
  2. 动态数值的随机附魔:Randomsuffix

两者只能选择其一,即在RandomPropery如果有了数字,Randomsuffix里就不要填写。这里所填的数字即随机附魔的编号,对应item_enchantment_template表内的Entry值。

第二层

如图所示,item_enchantment_template表内的Entry为随机附魔的编号,item_enchantment_template表内的Ench填写dbc文件中的词缀ID,chance为该随机附魔出现的概率,需要说明的是:

  • 如果你选择了RandomPropery,则Ench的值你需要填写的是ItemRandomProperties.dbc文件中的词缀ID;
  • 如果你选择了Randomsuffix,则Ench的值你需要填写的是ItemRandomSuffix.dbc文件中的词缀ID;
  • Entry不唯一,可以是多个,但同一个Entrychance的数值之和必须等于100

第三层

ItemRandomProperties.dbc

对应RandomPropery,我们需要查看的是ItemRandomProperties.dbc文件,请使用MyDbcEditor打开:

  1. 即词缀ID,也就是上文所说item_enchantment_template表内的Ench所要填写的数值;
  2. 即附魔效果编号,也就是说我一个词缀最多可以有三种附魔效果。

ItemRandomSuffix.dbc

对应Randomsuffix,我们需要查看的是ItemRandomSuffix.dbc文件,请使用MyDbcEditor打开:

  1. 即词缀ID,也就是上文所说item_enchantment_template表内的Ench所要填写的数值;
  2. 即附魔效果编号,也就是说我一个词缀最多可以有三种附魔效果;
  3. 即倍率控制,第25列控制20列的附魔效果倍率,第26列控制21列的附魔效果倍率,第27列控制22列的附魔效果倍率。

RandPropPoints.dbc

这里重点说下倍率控制,当下文第四层的SpellItemEnchantment.dbc文件内第3-5列的某数值为5(即表示为属性点数),并且其对应最小值为0x6时,会指向RandPropPoints.dbc文件中的索引值:

  1. 即装备等级;
  2. 即史诗装备;
  3. 即精良装备;
  4. 即优秀装备。

其中史诗、精良、优秀装备每栏对应装备类型为:

栏数 对应的装备类型
第2、7和12栏 头部 衬衣 胸部 腿部 双手武器 长袍
第3、8和13栏 肩膀 腰带 脚部 手套 饰品
第4、9和14栏 脖子 护腕 戒指 盾牌 披风
第5、10和15栏 单手武器 主手武器 副手武器
第6、11和16栏 弓箭 投掷武器 远程武器

以装备等级为300的装备举例,假如我们有一件紫色头部装备,那么他参考的是2-6列中第2列的索引值:431,假设我们给他的附魔效果倍率是10000,那么这件装备附魔属性值=10000(倍率)×431(索引值)÷10000,这件装备附魔属性值就是431,如果倍率是20000,那么就是:862。

这两个dbc的意义在于可以精细控制不同装等、不同颜色、不同类型装备的附魔属性值。

第四层

以上ItemRandomProperties.dbcItemRandomSuffix.dbc文件的附魔效果编号均指向SpellItemEnchantment.dbc文件,请使用MyDbcEditor打开该文件:

列数 说明 详细解释
1 编号
2 费用
3-5 类型 1=法术伤害;2=物理伤害;3=混合(武器、全属性、钓鱼等);4=护甲;5=属性点数;6=石化(嘲讽)
6-8 附魔最小值 可控1、2、4类型的数值,不可控3、5、6类型的数值
9-11 附魔最大值 可控1、2、4类型的数值,不可控3、5、6类型的数值
12-14 Spell技能(id) 若数值为5,则代表状态,否则参考spell.dbc技能ID
19 附魔效果描述
31 描述标识
32 光环 参考ItemVisuals.dbc
33 攻击范围 参考SpellRange.dbc
34 珠宝编号
35 附魔条件
36 需要技能 参考SkillLine.dbc
37 需要技能等级
38 需要等级

注意:DBC文件里面有的列中的值是以”0x”开头的,那表示这是16进制的数,碰到这种数字,就需要用计算器转化成十进制(”0x”只是一个16进制的标识,不要改动)

第五层

这里的Spell.dbcItemVisuals.dbcSpellRange.dbcSkillLine.dbc文件我就不详细说了,因为太多太多了,后面我会分别单独出文章来介绍。

操作实践

比如我想某件装备有一定几率附魔遗产技能:

第五层作业

  1. 首先在Spell.dbc里面加入遗产技能,打开WDBX Editor工具,按Ctrl+O,选择Spell.dbc文件,选择WotLK 3.3.5(12340)选项,点Load
  2. 打开后选择菜单栏的Import选项,点From CSV,选择下载的Spell.csv文件(提取码:pm4m),点Load导入遗产技能,导入后按Ctrl+S保存文件。

第四层作业

  1. 打开WDBX Editor工具,按Ctrl+O,选择SpellItemEnchantment.dbc文件,选择WotLK 3.3.5(12340)选项,点Load
  2. 打开后选择菜单栏的Import选项,点From CSV,选择下载的SpellItemEnchantment.csv文件(提取码:ejbf),点Load导入,导入后按Ctrl+S保存文件。

在这里如果你源码功能里有 mod-random-enchants,做到这里就完事了,如果你没有,继续下一步:

第三层作业

打开WDBX Editor工具,按Ctrl+O,选择ItemRandomProperties.dbc文件,选择WotLK 3.3.5(12340)选项,点Load

打开后选择菜单栏的Import选项,点From CSV,选择下载的ItemRandomProperties.csv文件(提取码:zlmh),点Load导入,导入后按Ctrl+S保存文件。

第二层作业

打开Navicat工具,打开acore_world数据库里的item_enchantment_template表,点导入,导入类型选CSV文件,选择下载的item_enchantment_template.csv文件(提取码:b1ao),一路点下一步导入。

第一层作业

这里我以破损的短剑为例,打开acore_world数据库里的item_template表,找到entry25破损的短剑物品,在RandomPropery栏里输入10000

制作补丁

服务端补丁

将你制作的Spell.dbcSpellItemEnchantment.dbcItemRandomProperties.dbc三个文件上传到服务端的dbc文件夹,重启服务端即可生效。

客户端补丁

新建客户端补丁文件夹,在其目录下再新建DBFilesClient文件夹,将你制作的Spell.dbcSpellItemEnchantment.dbcItemRandomProperties.dbc三个文件放入其中;

右键以管理员方式打开MPQEditor工具,点菜单栏新建MPQ,文件名输入patch-zhCN-A.MPQ,点下一步,点从文件或者文件夹创建MPQ文档,选择客户端补丁文件夹,一直下一步即可制作好客户端补丁;

patch-zhCN-A.MPQ放入World of Warcraft\Data\zhCN游戏目录,运行游戏查看效果:

测试服内我添加了所有物品掉落时,有一定几率附魔遗产技能,可以去体验下。

批量更改

回到第一层,我这里是以一件装备作为演示,如果需要批量添加所有装备的随机附魔,则需要SQL语句,举例:

UPDATE item_template SET RandomProperty = 10000 where randomsuffix = 0 and RandomProperty=0 and (class = 4 or class = 2) and Quality > 1 and quality<5 and (bonding = 1 or bonding = 2) and ItemLevel > 30;

这段代码的意思是:为randomsuffix = 0并且RandomProperty=0,并且物品种类为护甲或者武器,并且物品品质大于白色小于橙色,并且物品为装备绑定或拾取绑定,并且物品等级大于30的物品,进行10000附魔。