Codejie's C++ Space

Using C++

wxDeMPQ更新 - DBC的快速查询实现,并上传DBQueryLibrary

    为了获得一个模型的BLP文件名称,需要查询特定的DBC和WDB文件。例如,为了得到某个装备的模型,需要从WDB文件中,根据其名称获得对应的ID和DisplayID,虽然这两个ID在Item.dbc中也有对应关系,但Item.dbc却中没有名称,所以WDB对于按照名称查询来说,是非常重要的;(插一句啊,也许有人会问,为啥不都放在item.dbc中呢,多简单啊,如果真的这样做,代价就是一来更大的数据文件,首先名称是字符串类型,数据量比较大,加上又和“本地化”相关,就算只有本地语言,根据DBC的设计,也需要预留其他语言的位置;然后是对于想我这样的修仙玩家来说,大多数item是见不到的,这样本地数据就不用保持这个值了;还有就是可以更加灵活的更名,item改名了,不用patch。我是这样理解的,基于我都能想到的这些优势,想来BLZ也自然会将名称放在wdb中了。)有了ID和DisplayID后,在ItemDisplayInfo.dbc中就可以获得模型的M2和BLP了,理论上就可以Show了。
    目前网络上多数的直接使用item.csv,来获得名称与ID和DisplayID对应关系,来最终Show模型,想来应该是一个人的WDB内容是不全的,需要补充,还有估计这样就省去了对WDB的查询了。
    对于wxDeMPQ来说,我是想自动获得这个对应关系,(当然,我的WDB内容空空。。。)这样就需要一个实现查询DBC和WDB的功能,于是就有了DBQueryLibrary。
wxDeMPQ-DBQuery-Test.JPG
    当前刚实现了对DBC的查询,基于wxDeMPQ的需求,即根据一个字段的内容,查询另一个字段的内容要求,DBQueryLibrary仅仅是简单的两个字段对于关系查询,而且是唯一查询,就是说,如果匹配上了,就获得结果,并退出。要是需要枚举操作,或者其他方式的查询,如一对多、Key查全表等,改改应该不难。这里是源码,有兴趣的改去吧。。。其中实现了DBC的加载和读取方式,需要DBCFields.xml文件来指定DBC字段意义。编译的话,需要tinyxml和stormlib。

posted on 2009-05-18 23:57 codejie 阅读(507) 评论(0)  编辑 收藏 引用 所属分类: MPQ - WOW


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜