本文來自互聯(lián)網(wǎng)
之前有人問我新出的錦衣是否是在shape.wd8資源包內(nèi),但是分析之後發(fā)現(xiàn)資源是以3D模型的形式存放在r3d.npk內(nèi)的。雖然去年夏天簡單分析過.gim模型格式,但要我把它渲染的跟夢幻裏一樣效果還是有些難度的,畢竟我也只是剛剛導出了T-Pose模型而已。
前幾天又看到了別人的留言,大家還在為提取新資源而頭疼。既然如此,那麼何不嘗試提取一下,也小小的滿足一下自己的好奇心。
問題切入點
負責渲染的程序xyqsvc.exe是如何將渲染好的圖片傳給客戶端程序my.exe使用的?
最開始時,我以為xyqsvc.exe將渲染好的圖片存放在v3d_cache目錄下的文件內(nèi),然後my.exe讀取這個文件。但仔細一想,多個程序?qū)ν粋€文件同時讀寫,還要同步,這幾乎是不可能的。而且使用FileMon監(jiān)視文件讀寫,發(fā)現(xiàn)my.exe是根本不讀取這些文件的。之後的分析顯示,v3d_cache下的v3d.hdr和v3d.dat只是xyqsvc.exe的緩存文件,是為了方便下次使用而保存的。傳送圖片的真正辦法是內(nèi)存共享。(查找內(nèi)存共享時看到了雲(yún)風哥對這個技術(shù)的介紹,證明我的分析是基本正確的。出乎我的意料的是,xyqsvc.exe是多個客戶端共享的)
言歸正傳,既然渲染好的圖片緩存下來了,那麼必定是可以提取的。(其實不緩存也可以在內(nèi)存裏截取,但涉及的問題就要復雜許多)
下面把我分析的 v3d.hdr 和 v3d.dat 的格式寫出來,全當是做個備忘吧。
v3d.hdr 的格式分析
文件開頭是一個
typedef struct {
unsigned long flag; // 'v3dh'
unsigned long version; // 0x10005 等,版本很多
unsigned long offset; // 索引表所在的地址
} v3dh_file_header;
跳轉(zhuǎn)到v3dh_file_header.offset後是
long v3dd_size; // v3d.dat 的大?。ㄒ宰止?jié)為單位)
long v3dh_index_size; // v3dh 索引表的大?。ㄒ宰止?jié)為單位)
接著是一片(就是數(shù)組啦)
typedef struct {
long offset1; // 見後面說明
long offset2; // 同上
long linker; // 與此索引相關(guān)聯(lián)的索引編號(從零開始計數(shù))
} v3dh_index;
v3dh_index.offset1 所指內(nèi)容的格式
unsigned char size; // 這部分數(shù)據(jù)的大小,不包含這一字節(jié)
unsigned long var1; // 未知
unsigned long var2; // 裝備調(diào)色板信息
unsigned long var3; // 武器調(diào)色板編號
unsigned long var4; // 未知(實際是一個鏈表,目前見到的都是NULL)
unsigned long var5; // 指向名稱信息,開頭1字節(jié)總是0,想不明白
unsigned char Ext[235]; // 最長為 235 ,具體數(shù)值根據(jù) size 判斷
以上變量中 var2 var4 var5 均為實際相對 var1 的偏移量。
如果 var2 為零,那麼對應的調(diào)色板為 ("mypal/weapon\%d.pal", var3)
如果 var2 不為零,那麼它指向如下結(jié)構(gòu):
typedef struct {
short num1;
short count;
short num2[count];
};
這個結(jié)構(gòu)的含義不是非常清楚,目前見到的例子中,count總是1,這裏只對這種情況說明。
如果 num2[0] 中的高3位不為零,即 (num2[0] & 0xE000) != 0時,對應的調(diào)色板為 ("mypal/equip\%d.pal", num2[0])
否則,對應的調(diào)色板為 ("mypal/equip\%d_%d.pal", num2[0], num1)
v3dh_index.offset2 所指內(nèi)容的格式
與 offset1 相比,這個就簡單的太多了。
long frameCount;// 幀數(shù)
long dirCount; // 方向數(shù)
long dat_offset_list[frameCount*dirCount]; // 每一幀數(shù)據(jù)在 v3d.dat裏的地址
mypal.wdf 中 .pal 文件的格式
unsigned long flag; // '.pal'
unsigned short palCount; // 調(diào)色板顏色數(shù)(目前見到的都是256)
unsigned short sectionCount; // 分段數(shù)目(從邏輯上來說 sectionCount要麼等於零,要麼大於等於二)
unsigned char sectionSize[sectionCount]; // 這個數(shù)組之和等於 palCount
_ARGB palItems[palCount]; // 實際上,這裏的 alpha 都是錯的,遊戲也不使用
v3d.dat 的格式分析
文件開頭同樣是一個
typedef struct {
unsigned long flag; // 'v3dd'
unsigned long version; // 版本號 0x10005 等
} v3dd_file_header;
接著就是一幀一幀的圖片數(shù)據(jù),可以根據(jù) v3dh 中的dat_offset_list[] 來定位。
下面對定位後的一幀數(shù)據(jù)進行分析。
unsigned short Size; // 此幀數(shù)據(jù)的大小,不包含這2字節(jié)
typedef struct {
long keyx; // 很常見的一個結(jié)構(gòu),不多廢話
long keyy;
long width;
long height;
} v3dd_frame_header;
接下來,可能存在一個512字節(jié)的16位調(diào)色板,也可能不存在,這完全取決於xyqsvc.exe渲染圖片時是否正確加載了mypal.wdf裏的調(diào)色板。
然後是每一行數(shù)據(jù)的偏移地址,這一點與was圖片格式一樣,因為它要支持邊解壓邊繪制。此外,數(shù)據(jù)的壓縮格式與was圖片也是一樣的。
判斷是否存在512字節(jié)內(nèi)置調(diào)色板的方法是,判斷幀數(shù)據(jù)開始16字節(jié)處(也就是height後面)的4字節(jié)數(shù)據(jù)的值是否為圖片高度的4倍再加16,如果為真,那麼基本可以確定不包含內(nèi)置調(diào)色板。
至此,緩存文件分析完畢。
根據(jù)以上分析,我寫了一個提取工具,如圖:
使用說明
本工具是通過xyqsvc.exe生成的緩存文件來提取錦衣和唯美版資源的。
所以,要提取的資源必須在遊戲中顯示過。為了減少無關(guān)圖片的提取,可以先將v3d_cache(唯美版是vmresv3d_cache)下的v3d.hdr和v3d.dat刪除,然後再進入遊戲。
遊戲目錄的選擇:
如要提取經(jīng)典版的圖片,就要選擇遊戲所在的目錄。如果要提取唯美版的圖片,就要選擇遊戲目錄下的vmres文件夾。假設(shè)遊戲安裝在"D:夢幻西遊"裏,那麼提取經(jīng)典版要選擇"D:夢幻西遊",唯美版要選擇"D:夢幻西遊vmres"。
選擇好導出目錄後,點Go
小編我:那麼就四說要想獲得所有的錦衣資源就必須在遊戲中等級要六十幾以上還要把所有錦衣都買了,都穿上然後把所有的動作都顯示一遍(表情、戰(zhàn)鬥、坐騎等等)才行。OMG,不現(xiàn)實啊!不過可以用來做靜態(tài)的,做Flash就不太現(xiàn)實了。我研究了下,提取出的文件很亂很亂,都不知道怎么多文件里哪個是你想要的,而且還是TGA格式圖片一個個查看太麻煩了,提取出的部分文件還會有缺胳膊少腿的問題。錦衣所有動作、渡劫所有動作都可以提取出來,只要在游戲里顯示過就行,不管是別的玩家還是你都可以。
軟件下載
v3d_extractor.rar
該資源為新浪微盤共享,暫時不支持外鏈,請在評論中留下您的郵箱(支持匿名,無需註冊),我會在24小時內(nèi)發(fā)送。
用於提取夢幻西遊出神入化資料片錦衣系統(tǒng)新資源
解壓密碼
本站資源解壓密碼為:xlongoo@hotmail.com
本站所有資源均為共享,如果共享過期請聯(lián)系站長。
本站聲明
⒈本站資源收集于網(wǎng)絡,純屬愛好,不做任何商業(yè)用途!版權(quán)歸合法所有者所有;
⒉本站提供的資源下載連接于其他網(wǎng)站,不保證提供的下載資源的準確性、安全性和完整性;下載后請自行檢查是否帶有病毒,同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。
⒊如果認為侵犯您的版權(quán),請通知我們,我們立即刪除;
⒋如不同意以上聲明請勿下載,謝謝合作;
⒌我們強烈建議您購買和使用正版軟件、光盤等。使用正版資源自豪光榮!
愛華網(wǎng)


