标题: 求助 关于data的结构
性别:男-离线 岱瀛
(deving)

长平侯
川峡东路经略使
监管使

Rank: 19Rank: 19Rank: 19Rank: 19
组别 经略使
级别 左将军
好贴 1
功绩 2293
帖子 1370
编号 55810
注册 2005-12-22
来自 人间
家族 慕容世家


发表于 2007-4-29 22:25 资料 个人空间 短消息 看全部作者
Data文件,可以简单的理解成游戏的本地库吧。原来是经过LS算法压缩过的,不过这个在long long ago 就有Van大的破解LS压缩算法的反压缩了。

我们现在做的MOD,全部用的Data事实上都是解压过的。叶落的修改器我记得是带有解压功能的。

那么,对于解压后的Data文件,事实上他已经就没有秘密可言了。

而exe和data的关系是什么呢?

exe是游戏的核心引擎,他要一些初始数据,从Data中读取,根据曹操传引擎的特征,应该说很多小型的桌面或者客户端程序,对简单的本地库也常用这种做法,就是一次性把数据Load进内存。

这个Data文件有个很重要的特征,是只读的,不写的,这也是过去他用LS算法压缩的原因。LS压缩率不高,但是解压方便快捷,能一次解压Load进内存,由于数据的不更改性,他无需压回去。


象曹操传,存储用户数据的是存档,那个才带有写入功能。

这是存档和Data作为数据方面相比的差异性。但是,他们运行的时候,都是一次性的加载入内存,而不会去时时I/O读取的。

那么,回过头再看Data,楼主的想法问题。

解压后的Data,其实已经基本就是一份内存中的拷贝了。 所以说,你可以随意的改变Data的内容,Data的结构,(过去压缩的就不行,改完就解不了了),但是,随意修改Data的内容,Data的结构,有效吗?

答案是,如果Exe不跟随变更,显然无效。

楼主可以搜索下ssbye的关于曹操传FPE修改的贴子,你会发现,里面内存中的值多么的似曾相识。

修改Data,比如东方教主以前的扩展1024Data,首先就是得在exe的进程空间中分配出新的一块足够的内存空间来存放这1024人的资料。

而Data的扩展,只是二进制文件长短的变化而已。从文件的哪个位置,哪个字节的划分,那全是在exe里的控制的。

C语言的fseek函数,不知道楼主了解否。

另外一个关于Data变化的,就是五围从单字节改成双字节,这其实也是这样的道理。但是那个改动没有破坏Data的结构,只是把表示名字的字节空间给缩了,盈出字节来记录五围,exe里相应的读五围的代码改动下就完成了。这个其实也是楼主想横向扩展Data的一种可借鉴的方法。不过只改Data,不动Exe那是远远没那么便宜的事情的。还有,象你说的那种义理,斗志等类似增加五围到六围,七围的做法,还要考虑去修改exe的资源,至少得让武将信息里能显示出来吧。这些也是需要修改exe的。


扩展Data的例子还有,比如隋唐的扩展宝物总量。

还有听姑姑说轩辕传里也扩展过策略的总数。

这些都是扩展Data的做法。当然,你所谓的纵向的比较多。其实就是一偏移的问题。

当然了,纵的比横的扩展好扩,特别是如果横的那种扩展,不是从原来的信息里盈出字节,而是扩展字节那样。

这个有点类似于数据库里,增加记录总是比加字段改变表结构遇见的问题来得简单。

楼主用UE探索Data的精神还是需要鼓励的。作为一个Moder,正需要这种精神。不断探索,不断尝试是MOD进步的要求。

所以,哪怕现在你真的不想改exe,在这Data里的数字中,也说不定能玩出自己的花样来。

--------------------------

不过,又想多说几句。个人觉得曹操传引擎的Modify已经是达到了一种比较颠峰的境界了,本区名为设计与修改,当然也得提倡下设计的气氛。

OO世界里,本人对其中的一条 开闭原则倒是颇为认同。 面向修改关闭,面向新增开放。不过这和MOD似乎是背离的。不过,能达到目的就是好事吧。

所以,我个人对曹操传的修改,更喜欢的一种手法是封存其原来的,新添我们自己的。原来的有用则存,无用则封,现在的需要则增。

瓦岗的exe,我把战场特殊形象就给迁移出来,没有象过去那样存在于exe中,这部分数据,本来应该是在Data里的,更应该是在Data的个人信息里的,不过以开闭的设计原则,我自己就建立了一个person.wa的文件,其中的信息就有每个人的战场特殊形象的信息,是1024人都有的。

还有,数据信息的存放我也没有混进原来的存档中,而是单独建立一个b类型的存档。

象绝招,指针变量,整数变量这些新增内容,其实都存放在B存档中,这也是叶落说发现原来三个存档没什么变化的原因所在。

---------------

直接的下手修改,还是以封,存,添的设计手法修改,其实目的也都是为了心中期望的效果。

难易和繁琐程度嘛,修改也许容易,却不容易维护,而且容易出BUG。而设计手法虽然麻烦,虽然写的辛苦,却BUG能控制住,维护简单。

两者因人而异,楼主愿意研究也可相互参详。


顶部

正在浏览此帖的会员 - 共 6 人在线




当前时区 GMT+8, 现在时间是 2024-9-13 06:35
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.008283 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP