WDB和DBC类似,因此对于其字段说明亦采用和DBCFields.xml一样格式,新增amount类型,用于支持变化字段。
下面是和Item相关的WDB字段定义:
<File name="itemtextcache.wdb" version="1.0">
<Note>http://www.madx.dk/wowdev/wiki/index.php?title=ItemTextCache.wdb</Note>
<Fields>
<Field position="0" type="integer" size="4">ID</Field>
<Field position="1" type="integer" size="4">TextSize</Field>
<Field position="2" type="cstring" size="0">Text</Field>
</Fields>
</File>
<File name="itemnamecache.wdb" version="1.0">
<Note>http://www.madx.dk/wowdev/wiki/index.php?title=ItemNameCache.wdb</Note>
<Fields>
<Field position="0" type="integer" size="4">ID</Field>
<Field position="1" type="integer" size="4">EntrySize</Field>
<Field position="2" type="cstring" size="0">Text</Field>
<Field position="3" type="integer" size="4">Slot</Field>
</Fields>
</File>
<File name="itemcache.wdb" version="1.0">
<Note>http://www.sourcepeek.com/wiki/ItemCache.wdb</Note>
<Fields>
<Field position="0" type="integer" size="4">ID</Field>
<Field position="1" type="integer" size="4">TextSize</Field>
<Field position="2" type="integer" size="4">ClassID</Field>
<Field position="3" type="integer" size="4">SubClassID</Field>
<Field position="4" type="integer" size="4"></Field>
<Field position="5" type="cstring" size="0">Name</Field>
<Field position="6" type="cstring" size="0">Name</Field>
<Field position="7" type="cstring" size="0">Name</Field>
<Field position="8" type="cstring" size="0">Name</Field>
<Field position="9" type="integer" size="4">DisplayID</Field>
<Field position="10" type="integer" size="4">QualityID</Field>
<Field position="11" type="integer" size="4">TypeFlag</Field>
<Field position="12" type="integer" size="4">BuyPrice</Field>
<Field position="13" type="integer" size="4">SellPrice</Field>
<Field position="14" type="integer" size="4">SlotID</Field>
<Field position="15" type="integer" size="4">ClassFlag</Field>
<Field position="16" type="integer" size="4">RaceFlag</Field>
<Field position="17" type="integer" size="4">Level</Field>
<Field position="18" type="integer" size="4">RequiredLevel</Field>
<Field position="19" type="integer" size="4">RequiredSkillID</Field>
<Field position="20" type="integer" size="4">RequiredSkillLevel</Field>
<Field position="21" type="integer" size="4">RequiredSpellID</Field>
<Field position="22" type="integer" size="4">RequiredRankID</Field>
<Field position="23" type="integer" size="4">RequiredUnknRank</Field>
<Field position="24" type="integer" size="4">RequiredFactionID</Field>
<Field position="25" type="integer" size="4">RequiredFactionLevel</Field>
<Field position="26" type="integer" size="4">StackUnique</Field>
<Field position="27" type="integer" size="4">StackAmount</Field>
<Field position="28" type="integer" size="4">ContainerSlot</Field>
<Field position="29" type="amount" size="4" skipbyte="8">NumberOfStat</Field>
<Field position="30" type="float" size="4">Damage1Min</Field>
<Field position="31" type="float" size="4">Damage1Max</Field>
<Field position="32" type="integer" size="4">Damage1TypeID</Field>
<Field position="33" type="float" size="4">Damage2Min</Field>
<Field position="34" type="float" size="4">Damage2Max</Field>
<Field position="35" type="integer" size="4">Damage2TypeID</Field>
<Field position="36" type="float" size="4">Damage3Min</Field>
<Field position="37" type="float" size="4">Damage3Max</Field>
<Field position="38" type="integer" size="4">Damage3TypeID</Field>
<Field position="39" type="float" size="4">Damage4Min</Field>
<Field position="40" type="float" size="4">Damage4Max</Field>
<Field position="41" type="integer" size="4">Damage4TypeID</Field>
<Field position="42" type="float" size="4">Damage5Min</Field>
<Field position="43" type="float" size="4">Damage5Max</Field>
<Field position="44" type="integer" size="4">Damage5TypeID</Field>
<Field position="45" type="integer" size="4">ResistPhysical</Field>
<Field position="46" type="integer" size="4">ResistHoly</Field>
<Field position="47" type="integer" size="4">ResistFire</Field>
<Field position="48" type="integer" size="4">ResistNature</Field>
<Field position="49" type="integer" size="4">ResistFrost</Field>
<Field position="50" type="integer" size="4">ResistShadow</Field>
<Field position="51" type="integer" size="4">ResistArcane</Field>
<Field position="52" type="integer" size="4">WeaponDelay</Field>
<Field position="53" type="integer" size="4">AmmoType</Field>
<Field position="54" type="float" size="4">RangeModifier</Field>
<Field position="55" type="integer" size="4">Spell1ID</Field>
<Field position="56" type="integer" size="4">Spell1TriggerID</Field>
<Field position="57" type="integer" size="4">Spell1Charges</Field>
<Field position="58" type="integer" size="4">Spell1Cooldown</Field>
<Field position="59" type="integer" size="4">Spell1CategoryID</Field>
<Field position="60" type="integer" size="4">Spell1CategoryCooldown</Field>
<Field position="61" type="integer" size="4">Spell2ID</Field>
<Field position="62" type="integer" size="4">Spell2TriggerID</Field>
<Field position="63" type="integer" size="4">Spell2Charges</Field>
<Field position="64" type="integer" size="4">Spell2Cooldown</Field>
<Field position="65" type="integer" size="4">Spell2CategoryID</Field>
<Field position="66" type="integer" size="4">Spell2CategoryCooldown</Field>
<Field position="67" type="integer" size="4">Spell31ID</Field>
<Field position="68" type="integer" size="4">Spell3TriggerID</Field>
<Field position="69" type="integer" size="4">Spell3Charges</Field>
<Field position="70" type="integer" size="4">Spell3Cooldown</Field>
<Field position="71" type="integer" size="4">Spell3CategoryID</Field>
<Field position="72" type="integer" size="4">Spell3CategoryCooldown</Field>
<Field position="73" type="integer" size="4">Spell4ID</Field>
<Field position="74" type="integer" size="4">Spell4TriggerID</Field>
<Field position="75" type="integer" size="4">Spell4Charges</Field>
<Field position="76" type="integer" size="4">Spell4Cooldown</Field>
<Field position="77" type="integer" size="4">Spell4CategoryID</Field>
<Field position="78" type="integer" size="4">Spell4CategoryCooldown</Field>
<Field position="79" type="integer" size="4">Spell5ID</Field>
<Field position="80" type="integer" size="4">Spell5TriggerID</Field>
<Field position="81" type="integer" size="4">Spell5Charges</Field>
<Field position="82" type="integer" size="4">Spell5Cooldown</Field>
<Field position="83" type="integer" size="4">Spell5CategoryID</Field>
<Field position="84" type="integer" size="4">Spell5CategoryCooldown</Field>
<Field position="85" type="integer" size="4">BondID</Field>
<Field position="86" type="cstring" size="0">Description</Field>
<Field position="87" type="integer" size="4">BookTextID</Field>
<Field position="88" type="integer" size="4">BookPages</Field>
<Field position="89" type="integer" size="4">BookStationaryID</Field>
<Field position="90" type="integer" size="4">BeginQuestID</Field>
<Field position="91" type="integer" size="4">LockPickTalent</Field>
<Field position="92" type="integer" size="4">MaterialID</Field>
<Field position="93" type="integer" size="4">SheathID</Field>
<Field position="94" type="integer" size="4">RandomPropertyID</Field>
<Field position="95" type="integer" size="4">RandomPropertyID2?</Field>
<Field position="96" type="integer" size="4">BlockValue</Field>
<Field position="97" type="integer" size="4">ItemSetID</Field>
<Field position="98" type="integer" size="4">DurabilityValue</Field>
<Field position="99" type="integer" size="4">AreaID</Field>
<Field position="100" type="integer" size="4">MapID</Field>
<Field position="101" type="integer" size="4">BagFamily</Field>
<Field position="102" type="integer" size="4">TotemCategory</Field>
<Field position="103" type="integer" size="4">SocketColor1</Field>
<Field position="104" type="integer" size="4">Unkn</Field>
<Field position="105" type="integer" size="4">SocketColor2</Field>
<Field position="106" type="integer" size="4">Unkn</Field>
<Field position="107" type="integer" size="4">SocketColor3</Field>
<Field position="108" type="integer" size="4">Unkn</Field>
<Field position="109" type="integer" size="4">GemProperty</Field>
<Field position="110" type="integer" size="4">Unkn</Field>
<Field position="111" type="integer" size="4">DisenchantSkillLevel</Field>
<Field position="112" type="float" size="4">ArmorDemageModifier</Field>
<Field position="113" type="integer" size="4">ExistingDuration</Field>
<Field position="114" type="integer" size="4">Unkn</Field>
</Fields>
</File>
被ItemCache.wdb的字段搞死了~这个WDB字段变化较大和较快,根据wiki上的说明来定义字段是不对的,咱们国服的版本很特殊,导致在不得不一个一个字节的对,再根据wiki上的说明一点一点确认,前后消耗4小时之多,累死了~回头有机会把分析的“手稿”,拍了传上来,嘿嘿~
WDB字段变化较频繁,这也意味着在下个版本时,将不得不重新修过字段定义,还好,咱们国服这两个月不会变化了,哇哈哈~
这里是我本机上的
ItemCache.wdb中导出的Item表内容,有兴趣的下载看看了,目前网络上EN,zhTW版本很多,但咱们的zhCN比较少~
<--------补充分割线--------->
下面的图显示了我是如何分析Item数据的,别雷到,方法很原始--用笔和纸的方式。。。。嘿嘿~
![090428.jpg](/images/cppblog_com/codejie/090428.jpg)
整个分析过程分两步,定位WDB头尺寸,wiki上说头有六个字段,实际后面还有一排小字说那不是咱们国服版本,因为咱们只有五个字段,这个粗心导致前面的分析一直是错位的,死活数据都不正确,不得不打印出来一个一个字节看了;然后是分析数据记录,咱们还是落伍的,但由于怎么咱也3.0了,因此zhCN的WDB是一个旧版和新版的混合体,于是不得不打印出来一个一个字节看了~还好,不管内容是否正确,数据都读出来了~