??? 為了獲得一個(gè)模型的BLP文件名稱,需要查詢特定的DBC和WDB文件。例如,為了得到某個(gè)裝備的模型,需要從WDB文件中,根據(jù)其名稱獲得對(duì)應(yīng)的ID和DisplayID,雖然這兩個(gè)ID在Item.dbc中也有對(duì)應(yīng)關(guān)系,但I(xiàn)tem.dbc卻中沒有名稱,所以WDB對(duì)于按照名稱查詢來說,是非常重要的;(插一句啊,也許有人會(huì)問,為啥不都放在item.dbc中呢,多簡(jiǎn)單啊,如果真的這樣做,代價(jià)就是一來更大的數(shù)據(jù)文件,首先名稱是字符串類型,數(shù)據(jù)量比較大,加上又和“本地化”相關(guān),就算只有本地語言,根據(jù)DBC的設(shè)計(jì),也需要預(yù)留其他語言的位置;然后是對(duì)于想我這樣的修仙玩家來說,大多數(shù)item是見不到的,這樣本地?cái)?shù)據(jù)就不用保持這個(gè)值了;還有就是可以更加靈活的更名,item改名了,不用patch。我是這樣理解的,基于我都能想到的這些優(yōu)勢(shì),想來BLZ也自然會(huì)將名稱放在wdb中了。)有了ID和DisplayID后,在ItemDisplayInfo.dbc中就可以獲得模型的M2和BLP了,理論上就可以Show了。
??? 目前網(wǎng)絡(luò)上多數(shù)的直接使用item.csv,來獲得名稱與ID和DisplayID對(duì)應(yīng)關(guān)系,來最終Show模型,想來應(yīng)該是一個(gè)人的WDB內(nèi)容是不全的,需要補(bǔ)充,還有估計(jì)這樣就省去了對(duì)WDB的查詢了。
??? 對(duì)于wxDeMPQ來說,我是想自動(dòng)獲得這個(gè)對(duì)應(yīng)關(guān)系,(當(dāng)然,我的WDB內(nèi)容空空。。。)這樣就需要一個(gè)實(shí)現(xiàn)查詢DBC和WDB的功能,于是就有了DBQueryLibrary。

??? 當(dāng)前剛實(shí)現(xiàn)了對(duì)DBC的查詢,基于wxDeMPQ的需求,即根據(jù)一個(gè)字段的內(nèi)容,查詢另一個(gè)字段的內(nèi)容要求,DBQueryLibrary僅僅是簡(jiǎn)單的兩個(gè)字段對(duì)于關(guān)系查詢,而且是唯一查詢,就是說,如果匹配上了,就獲得結(jié)果,并退出。要是需要枚舉操作,或者其他方式的查詢,如一對(duì)多、Key查全表等,改改應(yīng)該不難。這里是
源碼,有興趣的改去吧。。。其中實(shí)現(xiàn)了DBC的加載和讀取方式,需要DBCFields.xml文件來指定DBC字段意義。編譯的話,需要tinyxml和stormlib。