|
本帖最后由 differentrain 于 2014-11-17 17:17 编辑 % N7 r$ }! B! [
" m% j; i. M& e; R% j其实最好是一切文件都不要改,只通过内存修改..) I. o1 t: H* U2 s" ]: o
: P2 R* ~. S4 } |
想从脚本的角度去控制游戏剧情,就看了一下游戏文件。发现游戏文件都是经过压缩或以特殊方式存储的。
) D& x' u3 u8 A+ Q' q
( _3 r4 h; w7 b这里是想说,这种存储方式会让我们产生一个美丽的误会,让我们觉得“呀,能改”....
& j7 E7 |( q( G7 w4 N8 ^: w! G; X' Y" l5 @
===================
! U, A; j, d ^$ W$ NData\下的文件:存储了游戏的数据。6 t; V' z# H; C0 k0 P$ S
/ W' V$ e% ~7 N1 r1 t虽然内容没压缩,但是却有特殊的格式。
# ?7 n0 ?" K5 ] o& v$ j& i$ U) d' M& o
这个举例吧。) I" _* _9 g9 o `. Q4 {8 i5 b
1 V4 J. z( g- y" Z( s
当我们用BIG码(950)打开文件\Data1\TVCase.dat的时候,除了乱码,我们看到了繁体中文的文字,看到了编号。8 S+ _! ]: }( L- b! h- d
) j1 f4 O& w: Y
+ j$ W$ t7 u4 t1 }: M7 J( v" G5 _
3 Q1 T' ]# K% l' d5 j
但是这么改是会有问题的...
! A0 S0 X1 H2 ~7 x k. I5 e
$ X# e+ m* e3 g: o( [) U C看十六进制内容。% R7 [4 J+ k8 d; |3 c, g8 ^6 J* J
& c. l, m, [; o
- u6 {, C% Q& H: w+ W
, X' g1 U6 y! s* F% d5 l就看第一行。
4 b q7 f D* A0 L2 O) g% J
* M# W- ^, p3 A2 \0 n& G0x00的位置:F2 03,是文件头(文件类型的标志)。内容固定。Data下每个文件的最开头都是这样的。, W& t$ {; e, D2 D6 O) B
0 q* s7 ^# S) y; x1 J" @往后四字节。0x04的位置起是6F 01;0x08的位置起是A0 01;0x0F位置起对应的字符是TV001..
( Z* N* V/ d' t' v/ u
. A' c6 N) v" QTV001肯定是编号了。那前面的两个是什么呢?9 ~5 Z9 Y k$ r/ z3 p+ o7 T
+ R" Q" t& z, ]: i4 t7 |
* \; L- v5 O- O( m看文件大小。* F O, x$ x/ z2 j, I
w/ j/ u/ w$ y- _
4 s$ l p; j+ _1 e4 O* O
( H0 r! |: a6 P16进制存储是从低位到高位的。所以6F01对应的十六进制数是16F,而A001对应的是1A0。
& y% K, q6 y' X& M9 ~) C7 y% @: `( {3 m1 `4 R; y1 G) J3 I
打开计算器,在16进制模式下把这两个数字相乘。然后转换到10进制。
. b4 {8 F; q9 h
$ C- a+ |4 _( S我们得到了一个数字:152672- a5 {0 w) R5 F* A
# }1 p; d" F* j& N! {6 ?熟悉吗...这个数只要加上12,就是这个文件的大小了。而从文件头开始到0xA0 01为止,正好是12个字节。
1 k* ]5 z+ }' R3 @8 J* c9 |5 ], `0 C+ t
整理一下格式
) A8 c: X' h( a8 j# }3 U& l8 I( c1 B% t: R: Q* X
- 文件头 四字节数值 四字节数值B 正文) e& D7 C& V4 {( M. ?8 t
- 0x00开始:F2 03 00 00 XX XX XX XX XX XX XX XX XX XX XX XX
复制代码
& f7 Q' ~' I$ J) S" L# q2 DA*B=正文的长度/ p( F$ v" k: M; m7 {" u8 S
1 f/ ^5 A' l! L
也就是说,如果要改内容,就一定要改A和B的值,让它们的乘积符合长度,否则很容易出错...
; S& ^' j5 c, M& K
$ G1 G% T9 [" x但是仍然有一个问题,就是A和B的值是随便选的,还是有规律呢?
$ s$ b0 e, \8 E) M1 U' _1 u8 x" i8 T' W# ~
我还不知道..需要调试。
: `6 W7 f5 @6 s* \/ V9 ]. _* @3 B$ C
所以还是不要轻易改的好...
2 e F* _8 F# ~1 I- ]9 j( r============================' y) S" Y0 c) C/ a/ Q. [) C/ `# V
说到脚本,就顺便说一下Script\下的脚本文件格式。. ?7 {- h C; }+ V/ C6 r" n8 o
- q# r7 o, H, {% Z) x9 J2 }不说怎么分析的了。就说结构吧。
. r% @# c. \, ~- 文件头 文件头 压缩前长度 压缩后长度
' X/ X% ]: v, [ s8 F - 0x00开始:00 00 00 00 80 00 00 00 75 63 49 00 DE CE 22 00+ ?7 ? b1 {& F) O) c
- ……
% f8 U7 q+ h! d6 y. k - ……
: d1 O, H3 x7 Z, j - 0x80开始:正文
复制代码 ) @9 R$ P% X4 c5 t/ v+ g M& I: O- s
正文内容是LZO压缩后的luaPlus脚本。4 |" A6 R, m# j0 k `
解压缩算法也还需进一步调试。
/ Y1 l% g- Z0 [% ~- Z1 s. v=============================/ U$ k1 M6 {$ s( b5 w( y/ n7 h; p8 H
顺便说,为什么改存档就没事。/ q5 Q% \) |" D' s/ p4 p3 F7 D9 z
! A9 ^. O% D, y, X' }& c. ]: F
因为存档既没有加密,前面也只有文件头"EC 03"..所以带胶布。! k% ^: h4 L# \# N
/ L2 c4 y% ]) c) F' {
|
|