日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

魔兽世界MPQ加载顺序

發布時間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 魔兽世界MPQ加载顺序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

=====================================================================

未經本人許可 任何網站、團體、個人不得以任何方式轉載本文 Author:G1NurX (Jeffrey Zhuang)

=====================================================================

本人原本準備發表一篇關于魔獸世界反和諧原理的文章,由于某些特殊原因決定存在草稿箱中,這也是為了玩家好。 本文只限討論魔獸世界的MPQ加載過程相關的問題。 適用讀者:對WOW加載MPQ的過程感到好奇;想要研究找不到門路; 不適用讀者:企圖在這里找到直接的反和諧方法或代碼; 1)首先簡單介紹一下MPQ,MPQ是暴雪使用的歸檔類型,內部不存儲文件名,也不存在目錄結構。listfile是文件名的列表,其實是可有可無, 它的存在與否和歸檔能否使用沒有聯系。沒有listfile,MPQ也是合法的。文件的查找是通過搜索Hash表完成的,每個文件用它的完整“路徑” Hash過后存在Hash table中,例如:Character/BLOODELF/FEMALE/BLOODELFFEMALEFACELOWER00_00.BLP 這個字串經過Hash, 最終通過Hash結果索引歸檔內的文件。 2)在MPQ的實際應用過程中,游戲內部并沒有指定那個貼圖在哪個歸檔中,需要的貼圖路徑來源于DBC,當然DBC存在MPQ中,DBC 的位置,客戶端是知道的。客戶端在讀取了DBC后就知道那個Entry使用哪個模型,這個模型的骨架文件時哪個,貼圖文件是哪個。DBC 中確定的路徑是內部路徑,是一個虛擬的路徑,這個虛擬路徑的根是base,下面會多次提到,根據這個路徑查找若干MPQ直到找到。 這個路徑中不指定在哪個MPQ中,最后確定使用哪個MPQ是由優先級決定的。 暴雪在更新客戶端的時候通常不是修改一些原始的MPQ,而是修改或增加Patch類的MPQ,Patch中和原始文件同名(包含路徑)時,通常 會使用Patch中的,正如上面這是由優先級決定的。這么做的原因應該是考慮到部分游戲是光盤版的,游戲的基礎文件是在光盤上的,沒法修改, 游戲更新就通過補丁類的MPQ實現。 3)使用MPQ文件和正常的文件讀寫操作類似,首先需要打開歸檔,函數為SFileOpenArchive,函數原型如下: bool SFileOpenArchive(char *lpFileName,DWORD dwPriority, DWORD dwFlags, HMPQ hMPQ) 第一個參數是歸檔文件的路徑,第二個參數是優先級,第三個參數是搜索的域,最后一個參數是返回的MPQ句柄。 當同時打開多個歸檔是,先搜索優先級高的歸檔。因此Patch類的MPQ優先級高。客戶端中存在一張表,有4個字段 分別是:歸檔名;Flag1;Flag2;HMPQ ========================================= 歸檔名 Flag1 Flag2
alternate.MPQ33
interface.MPQ11
misc.MPQ11
model.MPQ11
texture.MPQ11
terrain.MPQ11
wmo.MPQ11
sound.MPQ11
fonts.MPQ11
dbc.MPQ11
lichkingspeech.MPQ21
expansion.MPQ23
expansionloc.MPQ21
lichking.MPQ23
lichkingloc.MPQ21
common.MPQ12
common-2.MPQ22
****//locale-****.MPQ12
****//expansion-locale-****.MPQ22
****//lichking-locale-****.MPQ22
****//speech-****.MPQ12
****//expansion-speech-****.MPQ22
****//lichking-speech-****.MPQ22
development.MPQ21
========================================= 根據本人猜測,Flag1代表了歸檔的類型,1=基礎包(標準版WOW);2=擴展包(用于資料片);3=定制包(根據不同國家的客戶端)。 Flag2到目前為止還無法解釋,根據經驗應該和搜索域有關。 概括起來講,Flag1一定程度上確定了優先級,Flag2確定了讀取的范圍,換句話說,有些文件允許直接使用客戶端文件夾下的文件, 例如Interface,這個特性本人猜測和Flag2指定的數值有關。 *(如果哪位朋友有新的發現請與本人聯系) 3)下面是標準魔獸世界(沒有被和諧的情況)實際加載過程中指定的優先級。數值在不同機器上可能不一樣,但是一樣版本的應該客戶端應該一樣。 ======================================= 歸檔名 優先級 DATA/zhCN/lichking-speech-zhCN.MPQ 0x28 DATA/zhCN/expansion-speech-zhCN.MPQ 0x29 DATA/zhCN/lichking-locale-zhCN.MPQ 0x2A DATA/zhCN/expansion-locale-zhCN.MPQ 0x2B DATA/zhCN/speech-zhCN.MPQ 0x2C DATA/zhCN/locale-zhCN.MPQ 0x2D DATA/common-2.MPQ 0x2E DATA/common.MPQ 0x2F DATA/lichking.MPQ 0x30 DATA/expansion.MPQ 0x31 DATA/zhCN/patch-zhCN.MPQ 0x40 DATA/Patch.MPQ 0x41 DATA/Patch-2.MPQ 0x42 DATA/zhCN/patch-zhCN-2.MPQ 0x43 ======================================= *數值越大優先級越高,

和網上流傳的說法是有出入的,但是基本一致。common和common-2與網友猜測的數值越大是相反的。

第二請看最后4條,首先loacle文件夾下的第一個Patch優先級是Patch中最低的,然后是base下Patch,locale剩下的Patch是優先級相對最高的。

這也和網上流傳的先加載locale下的,然后是base下的,數字越大優先級越高,其實不然。

?

4)可能有人做過實驗想要說我說的不對,明明locale下的優先級比base下的高。到這,其實還只解釋了一半,因為前面的結果是標準版的WOW,

閹割和諧版的還有后文,表現出來的是假象,真相如下。

?? ?凡是魔獸世界的MPQ有過點研究的都應該知道WOW China Client的MPQ與世界文明國家運營的WOW不太一樣。某哥一番講話,眾多小弟為

給某哥留下一個好印象,為能青云直上,對某哥的講話進行深入研究,研究表明WOW這款在全世界運營良好的游戲不符合天朝的國情,于是艾澤拉斯大陸

遭受了核諧打擊,從此之后patch下多了一個“文件夾”,名為alternate,前面說過MPQ中不含文件夾,MPQ內部是“平坦”的。自從TBC后,base下多了一個

叫做alternate.MPQ的歸檔文件文件。這個歸檔內的alternate或alternate.MPQ使得艾澤拉斯大陸骸骨變僵尸,骸骨變墳堆,一出鬧劇,至今仍在上演。

這樣的修改有兩個表現現象:

(1)alternate.MPQ在第一張表中第一項就是。在實際運行中獲得的優先級數值為0x44,比表二中任何一個都要高。

(2)凡是包含alternate“文件夾”的Patch文件要比沒有Patch的高。假設一下:現在有兩個文件DATA/Patch.MPQ與DATA/Patch-2.MPQ,當Patch-2.MPQ

包含了alternate“文件夾”,這個文件夾中剛好有一個文件和Patch.MPQ中的某個文件同名(包含路徑,去alternate),那么Patch-2.MPQ中alternate文件夾

中的文件會被優先加載。于是就產生了一些優先級解釋的假象。而且,包含alternate的patch類MPQ優先級比alternate.MPQ更高!如果哪位想改模型,

而且喜歡鉆牛角尖,要讓自己的模型獲得最高優先級,好吧,那就在Data/locale文件夾/patch-locale-X.MPQ,X取相對最大,把模型文件放alternate下。

好吧,這是你的模型文件優先級已經無敵了。當然,還有一個signature文件會校驗每個歸檔文件的合法性。如果能制作出一個signature放在自己的patch中,

并獲得相對較高優先級,就算不用改客戶端也能過自檢了。好像有點跑題了- -!

?

?

5)MPQ的加載過程:

?

(1)加載補丁類歸檔,賦予相對較高優先級

(2)加載定制歸檔賦予相對較高優先級

(3)加載基礎歸檔和擴展歸檔,賦予相對較低優先級

(4)包含定制文件夾的補丁類歸檔賦予一個更(最)高的優先級再次打開。

?

(完)

?

2/24/2010 19:55

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的魔兽世界MPQ加载顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。