首  页   最新日志    火人论坛        火人作品    编程园地    网络日志    网友作品     留言本本     关于火人
用户登陆
用户:
密码:
 

站点日历
73 2017 - 10 48
1234567
891011121314
15161718192021
22232425262728
293031




日志搜索

 标题   内容

 
 
网络版珠宝大对决游戏 仔仔成长日记(五)周岁艺术照
未知 冒险岛资源结构(五)data.wz的目录结构与Python源码
   [分类:编程园地][发表日期:2006-9-30] [发表:火人[查看:169587]

按此在新窗口打开图片
data.wz的文件头定义如下:
  TWizFileHeader = packed record // Data.wz数据头结构
    FileIdentity: array[1..4] of char; //占4位, 文件标识头:PKG1
    FileSize: int64;                        //占8位,Data.wz文件大小,以字节为单位
    FileStart: Longword;                //占4位,目录信息起始地址
    Copyright: array[1..64] of char; //可变长度(FileStart-16),版权信息
  end;

读取文件头的代码如下:
程序代码:[ 复制代码到剪贴板 ]
  aMapFile := TFileStream.Create(MapFilePath, fmOpenRead);//MapFilePath为data.wz文件路径
  try
    aMapFile.Read(WizFileHeader, 16); //
    aMapFile.Read(WizFileHeader.Copyright, WizFileHeader.FileStart - aMapFile.Position); //
  finally
    aMapFile.free;
  end;


接下来就是data.wz的目录信息了,wz文件的目录是一个递归的树形结构,按深度遍历的顺序存放:
[根节点数目][根节点1][根节点2][根节点3]...
[第1层节点1数目][子节点1][子节点2][子节点3]...
[第1层节点2数目][子节点1][子节点2][子节点3]...
......
[第2层节点1数目][子节点1][子节点2][子节点3]....
......
最后结束的地方就是资源数据起始地址
其中每个节点的数据结构如下
  TWizFileInfo = packed record 
    Name: string;                     //节点名称,加密存储,解密方法见冒险岛资源结构(一)
    Size: LONGWORD;              //节点资源所占大小
    Unknown1: LONGWORD;    //未知
    Unknown2: LONGWORD;    //未知
 end;

至于目录信息的DELPHI读取代码,因时间关系来不及整理了,大家可以参考附件中的Python源码(可读性更强),关键代码摘录如下:
程序代码:[ 复制代码到剪贴板 ]
def extractDirectory(f, baseName, blockOffset):
  global eFiles

  dirs  = []
  entryCount = rPackNum(f)
  for j in range(entryCount):
    filetype = rU8(f)    ; checkA(filetype, [0x02, 0x03, 0x04], f)
    if(filetype in [0x03, 0x04]):
      filename = rUStr(f)
    if(filetype in [0x02]):
      filenameloc  = rU32(f)
      filename = rUStrAt(f, filenameloc, blockOffset)
    filesize = rPackNum(f)
    unknown1 = rPackNum(f)
    unknown2 = rU32(f)

    v = {"Name": baseName + "/" + filename,
         "Size": filesize,
         "Unk1": unknown1,
         "Unk2": unknown2}

    if(filetype in [0x03]):
      dirs.append(v)
    if(filetype in [0x02, 0x04]):
      eFiles.append(v)

  for dir in dirs:
    extractDirectory(f, dir["Name"], blockOffset)

Python源码


[本日志由 火人 于 2006-09-30 01:46 PM 编辑]

[1] [2] [3] 

引用这个评论 PhyllisVOR 于 2017-05-01 05:47 AM 发表评论: 
wh0cd206685 [url=http://viagraonline2017.com/]buy viagra[/url] 

引用这个评论 Judithdiula 于 2017-04-24 04:33 AM 发表评论: 
wh0cd661635 [url=http://cialisgeneric2017.com/]cialis online[/url] 

引用这个评论 guoyijun163 于 2008-08-18 04:41 AM 发表评论: 
火人你好。。。
我想修改STRING.WZ的内容
由于修改部分字串长度超过原来长度就会导致WZ结构的破坏,不知能否将WZ重新打包生成

引用这个评论 火人 于 2007-06-26 11:28 AM 发表评论: 
http://www.huosoft.com/blogview.asp?logID=97

引用这个评论 sxz1234 于 2007-06-25 11:32 PM 发表评论: 
是不是 不同版本 解出来是不一样的 ?

我用了 不同版本 来解 好像 都不一样....

??能否说明下,谢谢!

引用这个评论 cjtang 于 2007-05-26 10:13 AM 发表评论: 
我想问问  客户端是哪个版本的

引用这个评论 demonyo 于 2007-03-01 12:21 AM 发表评论: 
火人先生,你好`  我是编程爱好者,但还是非常菜,平时会有玩游戏的习惯,但我不能玩盛大的冒险岛``我想做一个单机的冒险岛玩``但需要提取date.wz的各个文件,希望能给个特别版我``  emil:demonyo@avl.com.cn

引用这个评论 曉武蔵 于 2007-01-17 08:30 PM 发表评论: 
现在Global也解不了
那个Python解到小地图后就断开了 不知道为什么

引用这个评论 Fanxy 于 2007-01-17 09:38 AM 发表评论: 
用python源码解日服data.wz的图只解到台服地图就中断了 请问是为什么

引用这个评论 yuanminhb 于 2007-01-03 00:23 AM 发表评论: 
嗯嗯.图片版权的确很重要~~
我明白了,虽然不晓得但还是谢谢火人GG了

引用这个评论 火人 于 2007-01-03 00:02 AM 发表评论: 
to yuanminhb:出于图片版权的原因,导出功能屏蔽掉了,资源浏览软件仅供玩家娱乐而已
to nasd:除了最新版的韩服不能解包外,都可以正常解包

引用这个评论 nasd 于 2007-01-02 11:12 PM 发表评论: 
是不是要韩服的map。wz 文件 才行

引用这个评论 nasd 于 2007-01-02 10:47 PM 发表评论: 
能导出的图片我都导出了 还是完不了啊

[1] [2] [3] 

 

发表评论
发表: 用户:  密码:   注册?  
验证码    
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字
表  情
 

Copyright © 2006 All rights reserved. Design by huosoft

电话:13974847258    QQ群:7155339
Powered by L-Blog V-Blog 2004-2005