游客您好
  • 点击联系客服

    在线时间:8:30-18:00

    客服微信

    Wkr-3000y-kf

    电子邮件

    3000y@wenkeruan.com
  • 手机版

    随时掌握游戏动态

  • 扫一扫二维码

    添加微信客服

Lv.5 解脱境
277号会员,0活跃值,2022.10.27 加入
  • 207发帖
  • 173主题
  • 0关注
  • 0粉丝
这个人很懒,什么也没有留下。
独家推荐 更多>

[安全工具] 千年 *.map文件格式说明

[复制链接]
快要发癫啦 发表于 2023-2-8 10:41:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
*.map 文件是记载地图信息的文件。' g- ~3 V5 ?. z# q. o
: @  a+ o# H, x1 _( e; P
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。7 }1 s; J4 g( L0 W. o  n" h& M
  R8 O8 J) l- B) F7 Q# p
    第 2层地表就复杂一点,它是“物件”层的补偿层。“物件”是指树木、花草、房屋等东西的统称。为什么说第 2层是“物件”层的补偿层那,因为图象显示要有前后关系,近处的覆盖远处的东西,但长在地上的花,无论离的多么近都会被覆盖,所以给加在了地表 2层。下面开始说一个实际的文件start.map,用 UE打开它后会看到 16进制数据,右面对应是asc 码,前 7个字节的 16进制数据是:“41 54 5A 4D 41 50 32”,看右侧对应的 asc码是 “ATZMAP2”,这个是地图格式标识,是说明文件格式的。之后 9个字节为空,我们跳过,不用理会。之后的 4个字节是 :“28 00 00 00”,这个宽度是组成大地图的小正方形的宽度,为什么这么说呢?看下面的图你就会明白了,比如是一个 9 * 9 的大地图,是这样记录在 .map文件中的:1 1 1 2 2 2 3 3 31 1 1 2 2 2 3 3 31 1 1 2 2 2 3 3 34 4 4 5 5 5 6 6 64 4 4 5 5 5 6 6 64 4 4 5 5 5 6 6 6前面我们所说的组成大地图的小正方形的宽度(兰色那个矩阵),在这里就是 3。我们再继续看 map文件,接下来的 8个字节是:“ C8 00 00 00 C8 00 00 00”,前 4个字节是这个地图的宽度,后 4个字节是这个地图的高度 。下面是正式开始的地图数据了,这里有一点要注意的,我们前面提到了“组成大地图的小正方形”,他们在map 文件中被记录的时候,每个这个正方形的数据前面都会空出 20个字节,在读文件的时候跳过即可。地块数据由 12个字节的数据来表示,比如:“13 00 03 12 01 07 86 00 03 03 00 01”这个地块。13 00 地表一层的序号) E0 y* g) X5 ]$ a- a- s0 n- e

# b1 J4 N! Y4 b/ V
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号( c8 ]1 l2 U; ~- o: o/ G
07      在地表二层 12 01 这个大序列下的子序列编号
( @9 V0 M, G! }7 D  E; `3 }* E2 I
86      物件层的大序列# Y( S5 S7 M4 A- E
00      物件层的大序列下物件的子序列编号1 T4 Y$ F! t9 C
03 03 00  目前不详0 c# R; D, U1 i! ]4 Y2 d
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
9 K/ a0 `* j4 @* w
/ k  D3 j' Z/ z3 W! Y4 ~
//************************************************************
3 `) l" H: ^: t$ {! d& R
// 加载地图基本数据函数;4 r9 z: J! ]$ ~. F! K4 h
//************************************************************
' x% m: U( O+ v8 }
1 }  f) e$ @6 {" X& u3 f8 k
//************************************************************
# N- H2 F6 a$ M6 C
// 加载地图基本数据函数;# J' p' }% l' H- P2 P7 j3 B$ ~
//************************************************************
# m3 f1 t! A, _( t" P. u1 u1 T9 n

2 s" A1 A, L5 f" A9 _! s! s
int Cmap:oaddata(char *filnam)
3 A  ?3 {) r% u2 R* n+ p6 K
{
* a0 B! N, t3 L- a' e2 Z" v( @
        int Temdata;2 r2 g' i& ^# b1 `& W4 O* d

) f, q( r( N4 u! ?9 V$ O( @- Y$ \
        if(filnam == "") return 0;- ~# w6 O, z7 X
  u( N* x" k+ E
        fp_map = fopen(filnam,"rb");
6 h5 w. G& \  v- l, \! ~
2 D& W) ?1 R2 j7 U- R) c
        if(fp_map == NULL)        return 0;( L- x' k" @$ n) T) f
8 I( D. [3 k% c/ W$ @* V, a( G
        fseek ( fp_map, 16, SEEK_SET);$ d- a! x& l. z4 e% ]' w- k; l- t
        fread ( &ShortWidth, 4, 1, fp_map);
* p& Z1 E' S3 O- ?* {
        fread ( &Width, 4, 1, fp_map);
% w- u4 P4 _/ E% j# s3 b
        fread ( &Height, 4, 1, fp_map);
/ ?' D& D6 J, B+ K& p+ y6 i2 W

- O8 c0 z. G* w! w- U0 a
        int TW = Width / ShortWidth;
; h3 r: p4 [6 o5 O7 P' n
        int TH = Height / ShortWidth;
1 M* p; u# u+ D- j4 v, N' b

8 h7 Q6 G$ X: o% D! y/ e6 ^
        for (int j = 0 ; j < Width ; j++)( Z$ Q; q  E$ G, @- l; |# l8 K. _
        {
9 J& X% J- s1 x1 p6 J! [
                _DELETE_ARRAY(Cell);6 ]' [/ j  l- \( }" w4 N7 A
                _DELETE_ARRAY(Role);2 V) M5 x5 E3 g
        }
/ U& o. y9 Q& y5 E+ F" P) K, ]) b! K

0 G* g  s! c) c* r+ b) a' s
        Cell = new stCell*[Width];  L; _7 C* q2 b. M5 H( X. g
        Role = new stRole*[Height];
4 r7 x6 V9 [* O
        for (j = 0 ; j < Width ; j++)/ E6 }5 y( g. P$ N
        {* U) A3 f; P6 ]; N( F6 j! c
            Cell[j] = new stCell[Height];
3 i6 `7 r3 C4 s) l. y1 J
                Role[j] = new stRole[Height];        
  L3 w5 g% D; m  t& S2 C/ R
        }        
; J. s; G% o5 o* V& |# N

6 v: P2 Y- S1 h8 S+ `% Z
        fseek ( fp_map, 28, SEEK_SET);
" \. I1 `  t/ v! e" d
, v3 s0 V! N( `" \3 U6 O
        for (int y1 = 0; y1 < TH ; y1++)
- [% A- M" f: J3 F# D" ?
        {/ X7 _' A* S; U# U  D' r9 Z
                for (int x1 = 0; x1 < TW ; x1++)5 F1 e3 e; B4 n4 m
                {
8 L! o; z& Y* z8 H1 z- l, j5 A; _
                        fseek ( fp_map, 20, SEEK_CUR);! Z5 X" d- q2 Z) u
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
& _6 ?3 Z5 G$ z' {
                        {
; U! g, s; P2 @4 u
                                for (int x2 = 0; x2 < ShortWidth ; x2++)9 x) K1 M. g4 m) \
                                {" q% y* W" y% K* t6 m9 j3 j# T5 \
                                        fread ( &Temdata , 2, 1, fp_map);
7 R9 Q* Z0 n5 I3 E* C
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
% A5 }! G5 Z. U+ `+ V
5 R, e8 b- z* O4 L! ?
                                        fread ( &Temdata , 1, 1, fp_map);
) G  H' M9 }8 V+ b+ ]
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;  _9 J) R* Z; L3 e6 ^! C# Q' d
# }. e& w% ^. M0 i; q/ r
                                        fread ( &Temdata , 2, 1, fp_map);
- u5 l0 Z  [4 ~& k/ Z
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;) H1 L& O  z) f. l  W
. B: b) p( E  q3 G! q; e# T$ t5 U8 u
                                        fread ( &Temdata , 1, 1, fp_map);! h- G  @5 s+ A$ r/ M7 V
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
8 O2 L% N, x- X! L# k
                                        // 6个字节4 I4 H% W$ a6 I: \3 C+ T$ r
! O9 m" o2 R" d
                                        fread ( &Temdata , 1, 1, fp_map);, O* H% a3 P8 q' K9 T& ^
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
* y7 m  e# f, \! o0 V3 n1 l/ |
                                       
% w7 n; ~! N! x/ T7 }  H
                                        fread ( &Temdata , 1, 1, fp_map);2 f+ ]- [7 ^' x
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;$ Q* b: ~8 ]% `* h- ?$ c

' e( l; Y8 o" P) B/ P0 K0 S
                                        //fseek ( fp_map,3,SEEK_CUR);
$ W4 Z8 ]. |- Y0 z2 M" L7 K
                                        fread ( &Temdata , 1, 1, fp_map);0 C/ S" N( d2 q& d( {4 H1 {
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
9 C& q! W* a4 C7 |
                                        : r4 f6 W0 k) f( a: Z& `9 m
                                        fread ( &Temdata , 2, 1, fp_map);
+ K! w' y' k) C6 C( V. K
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
8 d7 {, _% e, l- y: V& i6 h
1 W+ E5 h6 t4 ~1 D1 b2 ~
                                        // 1个字节, A& \- E1 K) B5 u
                                        fread ( &Temdata , 1, 1, fp_map);
$ h, u. S8 Z- A% C4 c* n; M& P
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;4 D9 g& Z4 J8 S( r3 e
                                        //if (ftell(fp_map) > FilZize) return 0;' `! c$ I" I, G# ]$ ]+ [3 Z
                                }
+ [( `7 i* {* T! \7 J
                        }
4 _0 z0 ?5 ?8 F9 q( b; P1 g+ R6 b3 i
                }
  P! b9 P" t+ o) X& C0 ^( G& K& t
        }  n9 o0 ?; i) w& Y3 b8 C

" h, r+ o" N  L7 z1 `* ?
        fclose(fp_map);8 i2 m4 t5 n6 g3 k

+ k! D0 T+ n0 d8 u! U7 o

( i3 j) ^: \2 ]# p) V7 j
        return 1;1 k! m1 V2 z$ t7 O
}
% F3 C' k/ _0 W. R% `' {5 _
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

Powered by Discuz!X3.4 ©2001-2013 Comsenz Inc.闽公网安备 35099902000100号增值电信业务经营许可证 闽B2-20220593 闽ICP备2023014375号