魔兽世界MPQ加载顺序
=====================================================================
未經(jīng)本人許可 任何網(wǎng)站、團(tuán)體、個(gè)人不得以任何方式轉(zhuǎn)載本文 Author:G1NurX (Jeffrey Zhuang)
=====================================================================
本人原本準(zhǔn)備發(fā)表一篇關(guān)于魔獸世界反和諧原理的文章,由于某些特殊原因決定存在草稿箱中,這也是為了玩家好。 本文只限討論魔獸世界的MPQ加載過(guò)程相關(guān)的問(wèn)題。 適用讀者:對(duì)WOW加載MPQ的過(guò)程感到好奇;想要研究找不到門路; 不適用讀者:企圖在這里找到直接的反和諧方法或代碼; 1)首先簡(jiǎn)單介紹一下MPQ,MPQ是暴雪使用的歸檔類型,內(nèi)部不存儲(chǔ)文件名,也不存在目錄結(jié)構(gòu)。listfile是文件名的列表,其實(shí)是可有可無(wú), 它的存在與否和歸檔能否使用沒(méi)有聯(lián)系。沒(méi)有l(wèi)istfile,MPQ也是合法的。文件的查找是通過(guò)搜索Hash表完成的,每個(gè)文件用它的完整“路徑” Hash過(guò)后存在Hash table中,例如:Character/BLOODELF/FEMALE/BLOODELFFEMALEFACELOWER00_00.BLP 這個(gè)字串經(jīng)過(guò)Hash, 最終通過(guò)Hash結(jié)果索引歸檔內(nèi)的文件。 2)在MPQ的實(shí)際應(yīng)用過(guò)程中,游戲內(nèi)部并沒(méi)有指定那個(gè)貼圖在哪個(gè)歸檔中,需要的貼圖路徑來(lái)源于DBC,當(dāng)然DBC存在MPQ中,DBC 的位置,客戶端是知道的。客戶端在讀取了DBC后就知道那個(gè)Entry使用哪個(gè)模型,這個(gè)模型的骨架文件時(shí)哪個(gè),貼圖文件是哪個(gè)。DBC 中確定的路徑是內(nèi)部路徑,是一個(gè)虛擬的路徑,這個(gè)虛擬路徑的根是base,下面會(huì)多次提到,根據(jù)這個(gè)路徑查找若干MPQ直到找到。 這個(gè)路徑中不指定在哪個(gè)MPQ中,最后確定使用哪個(gè)MPQ是由優(yōu)先級(jí)決定的。 暴雪在更新客戶端的時(shí)候通常不是修改一些原始的MPQ,而是修改或增加Patch類的MPQ,Patch中和原始文件同名(包含路徑)時(shí),通常 會(huì)使用Patch中的,正如上面這是由優(yōu)先級(jí)決定的。這么做的原因應(yīng)該是考慮到部分游戲是光盤版的,游戲的基礎(chǔ)文件是在光盤上的,沒(méi)法修改, 游戲更新就通過(guò)補(bǔ)丁類的MPQ實(shí)現(xiàn)。 3)使用MPQ文件和正常的文件讀寫操作類似,首先需要打開歸檔,函數(shù)為SFileOpenArchive,函數(shù)原型如下: bool SFileOpenArchive(char *lpFileName,DWORD dwPriority, DWORD dwFlags, HMPQ hMPQ) 第一個(gè)參數(shù)是歸檔文件的路徑,第二個(gè)參數(shù)是優(yōu)先級(jí),第三個(gè)參數(shù)是搜索的域,最后一個(gè)參數(shù)是返回的MPQ句柄。 當(dāng)同時(shí)打開多個(gè)歸檔是,先搜索優(yōu)先級(jí)高的歸檔。因此Patch類的MPQ優(yōu)先級(jí)高。客戶端中存在一張表,有4個(gè)字段 分別是:歸檔名;Flag1;Flag2;HMPQ ========================================= 歸檔名 Flag1 Flag2| alternate.MPQ | 3 | 3 |
| interface.MPQ | 1 | 1 |
| misc.MPQ | 1 | 1 |
| model.MPQ | 1 | 1 |
| texture.MPQ | 1 | 1 |
| terrain.MPQ | 1 | 1 |
| wmo.MPQ | 1 | 1 |
| sound.MPQ | 1 | 1 |
| fonts.MPQ | 1 | 1 |
| dbc.MPQ | 1 | 1 |
| lichkingspeech.MPQ | 2 | 1 |
| expansion.MPQ | 2 | 3 |
| expansionloc.MPQ | 2 | 1 |
| lichking.MPQ | 2 | 3 |
| lichkingloc.MPQ | 2 | 1 |
| common.MPQ | 1 | 2 |
| common-2.MPQ | 2 | 2 |
| ****//locale-****.MPQ | 1 | 2 |
| ****//expansion-locale-****.MPQ | 2 | 2 |
| ****//lichking-locale-****.MPQ | 2 | 2 |
| ****//speech-****.MPQ | 1 | 2 |
| ****//expansion-speech-****.MPQ | 2 | 2 |
| ****//lichking-speech-****.MPQ | 2 | 2 |
| development.MPQ | 2 | 1 |
和網(wǎng)上流傳的說(shuō)法是有出入的,但是基本一致。common和common-2與網(wǎng)友猜測(cè)的數(shù)值越大是相反的。
第二請(qǐng)看最后4條,首先loacle文件夾下的第一個(gè)Patch優(yōu)先級(jí)是Patch中最低的,然后是base下Patch,locale剩下的Patch是優(yōu)先級(jí)相對(duì)最高的。
這也和網(wǎng)上流傳的先加載locale下的,然后是base下的,數(shù)字越大優(yōu)先級(jí)越高,其實(shí)不然。
?
4)可能有人做過(guò)實(shí)驗(yàn)想要說(shuō)我說(shuō)的不對(duì),明明locale下的優(yōu)先級(jí)比base下的高。到這,其實(shí)還只解釋了一半,因?yàn)榍懊娴慕Y(jié)果是標(biāo)準(zhǔn)版的WOW,
閹割和諧版的還有后文,表現(xiàn)出來(lái)的是假象,真相如下。
?? ?凡是魔獸世界的MPQ有過(guò)點(diǎn)研究的都應(yīng)該知道WOW China Client的MPQ與世界文明國(guó)家運(yùn)營(yíng)的WOW不太一樣。某哥一番講話,眾多小弟為
給某哥留下一個(gè)好印象,為能青云直上,對(duì)某哥的講話進(jìn)行深入研究,研究表明WOW這款在全世界運(yùn)營(yíng)良好的游戲不符合天朝的國(guó)情,于是艾澤拉斯大陸
遭受了核諧打擊,從此之后patch下多了一個(gè)“文件夾”,名為alternate,前面說(shuō)過(guò)MPQ中不含文件夾,MPQ內(nèi)部是“平坦”的。自從TBC后,base下多了一個(gè)
叫做alternate.MPQ的歸檔文件文件。這個(gè)歸檔內(nèi)的alternate或alternate.MPQ使得艾澤拉斯大陸骸骨變僵尸,骸骨變墳堆,一出鬧劇,至今仍在上演。
這樣的修改有兩個(gè)表現(xiàn)現(xiàn)象:
(1)alternate.MPQ在第一張表中第一項(xiàng)就是。在實(shí)際運(yùn)行中獲得的優(yōu)先級(jí)數(shù)值為0x44,比表二中任何一個(gè)都要高。
(2)凡是包含alternate“文件夾”的Patch文件要比沒(méi)有Patch的高。假設(shè)一下:現(xiàn)在有兩個(gè)文件DATA/Patch.MPQ與DATA/Patch-2.MPQ,當(dāng)Patch-2.MPQ
包含了alternate“文件夾”,這個(gè)文件夾中剛好有一個(gè)文件和Patch.MPQ中的某個(gè)文件同名(包含路徑,去alternate),那么Patch-2.MPQ中alternate文件夾
中的文件會(huì)被優(yōu)先加載。于是就產(chǎn)生了一些優(yōu)先級(jí)解釋的假象。而且,包含alternate的patch類MPQ優(yōu)先級(jí)比alternate.MPQ更高!如果哪位想改模型,
而且喜歡鉆牛角尖,要讓自己的模型獲得最高優(yōu)先級(jí),好吧,那就在Data/locale文件夾/patch-locale-X.MPQ,X取相對(duì)最大,把模型文件放alternate下。
好吧,這是你的模型文件優(yōu)先級(jí)已經(jīng)無(wú)敵了。當(dāng)然,還有一個(gè)signature文件會(huì)校驗(yàn)每個(gè)歸檔文件的合法性。如果能制作出一個(gè)signature放在自己的patch中,
并獲得相對(duì)較高優(yōu)先級(jí),就算不用改客戶端也能過(guò)自檢了。好像有點(diǎn)跑題了- -!
?
?
5)MPQ的加載過(guò)程:
?
(1)加載補(bǔ)丁類歸檔,賦予相對(duì)較高優(yōu)先級(jí)
(2)加載定制歸檔賦予相對(duì)較高優(yōu)先級(jí)
(3)加載基礎(chǔ)歸檔和擴(kuò)展歸檔,賦予相對(duì)較低優(yōu)先級(jí)
(4)包含定制文件夾的補(bǔ)丁類歸檔賦予一個(gè)更(最)高的優(yōu)先級(jí)再次打開。
?
(完)
?
2/24/2010 19:55
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的魔兽世界MPQ加载顺序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 备份数据 宝塔linux_宝塔面板教程大
- 下一篇: c语言 PTA2020总决赛 L1-4