游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
0 r) v/ D9 M* a

) f6 n7 v3 s, s
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。5 y; d3 x+ N0 Q/ Q2 N

. |4 c  }6 x* m: f. w& i7 t* K- w
    第 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 地表一层的序号
5 p# V& q) q- e

& P" H! T1 I  D6 r% D2 V  }8 |5 }
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号# @( g: j- ]8 Z+ a0 p9 u
07      在地表二层 12 01 这个大序列下的子序列编号
1 |# V. M  N" _5 ]7 |3 m
86      物件层的大序列- u0 e; P9 D8 b( L$ t/ i6 A
00      物件层的大序列下物件的子序列编号
% O" p7 p8 m2 g
03 03 00  目前不详$ G- b, b/ [6 b1 g4 u
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
% A) ?  r3 v0 D  `5 t5 w
5 W( p; l9 h, |0 X) l9 n+ v
//************************************************************: L6 A0 n3 Y, i# e  n7 l8 O  |
// 加载地图基本数据函数;0 A0 p3 f% q- L' ]  ]2 K
//************************************************************% c4 l7 @$ G# G( c' w+ v: @/ _  s

8 o  W2 l6 }7 c: x; Z9 G9 X
//************************************************************
0 e6 k) b  m( r2 c' }( e
// 加载地图基本数据函数;- E: P* @; a& p. o: n
//************************************************************
& Z$ Y7 O3 a* R: I  {
: F+ K- c& g9 P) X/ L
int Cmap:oaddata(char *filnam)
' v1 B/ s5 w" x: P) i8 U2 S
{  U# z: u2 N& q( m- c, B( _, j8 q
        int Temdata;
) O! h* H; h" R1 e) {) O

, `" a% D( z  P- ^) M+ w
        if(filnam == "") return 0;5 F% k7 \6 _) W. ?& P$ {% a* q7 ~

6 B6 V: ?1 h, d  m% Q7 _
        fp_map = fopen(filnam,"rb");/ z7 r$ `8 G" F2 a
0 u3 i, q9 f" O! N2 y: V
        if(fp_map == NULL)        return 0;" P; [. N& s0 @2 n* R$ L
5 h- w% q$ M0 o+ ~( ], P. V
        fseek ( fp_map, 16, SEEK_SET);! y7 y" j+ P- E
        fread ( &ShortWidth, 4, 1, fp_map);
' b9 q- j7 g! I1 f# W1 I! B0 n2 V1 |
        fread ( &Width, 4, 1, fp_map);. i( _$ }4 w+ e; y4 X
        fread ( &Height, 4, 1, fp_map);8 I. S2 t/ v$ i" M: k! Q5 `' K

" |6 t, o* I  c7 r' R# J
        int TW = Width / ShortWidth;
0 |8 v5 l6 N0 }) }4 A, Q- c
        int TH = Height / ShortWidth;9 x' d% G" Z: d

: o/ c& W5 B& p: D
        for (int j = 0 ; j < Width ; j++)
" {4 Q+ I0 O- ?" g5 A
        {
7 j) W0 C# I5 ?
                _DELETE_ARRAY(Cell);1 T. Q. g8 ^( C
                _DELETE_ARRAY(Role);8 c. g/ h! d6 w
        }
% S( g) Z  r  x% A/ {2 x

+ y: f% \, c" w1 F( }6 S
        Cell = new stCell*[Width];
8 t* M) i) J& D* I' y1 I
        Role = new stRole*[Height];
: ^  R* \7 L5 }: U' x
        for (j = 0 ; j < Width ; j++)
8 S" P* Z" f; O( ~9 x. O
        {
& {7 ^1 b9 p1 m% Q/ d* _6 V* B) D% {
            Cell[j] = new stCell[Height];
9 {4 U5 q6 o( D& G: h! N! Y
                Role[j] = new stRole[Height];        $ d( p) A: }; b/ k( Z
        }        ( y9 n' a4 o# d% ^- Q1 I4 b
7 S+ b* V2 C, F3 m- h  t1 i# I
        fseek ( fp_map, 28, SEEK_SET);2 ^% _9 s6 `% s" A  ~& @6 x" g
. `0 N7 A, S  s' g
        for (int y1 = 0; y1 < TH ; y1++)$ F5 E) ?$ D0 ^, d* c
        {
, ^" i  G- f2 A2 Y
                for (int x1 = 0; x1 < TW ; x1++)
8 l1 V! k% C- ]3 @  D, _
                {
  C8 K7 L5 m" G4 Q
                        fseek ( fp_map, 20, SEEK_CUR);5 [* D- G+ e8 {! f6 U/ r5 E; l- L( y
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
- v. D9 ~2 g( W. u1 }8 J- `+ ~
                        {
5 ^3 k& w' c2 y0 l* A
                                for (int x2 = 0; x2 < ShortWidth ; x2++)7 Z; s6 U$ e( N
                                {
# N/ B! M! O3 h) P- @7 {
                                        fread ( &Temdata , 2, 1, fp_map);
5 J& c/ j2 l: I8 l5 a8 I# U3 V
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;! L8 B. O! R" M
7 [; ~. r0 L2 Q. U2 C4 \& U
                                        fread ( &Temdata , 1, 1, fp_map);' {; d, l- r' I# S' ^4 V
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;6 x% i! g/ j8 }% ?( t2 l
+ o2 o/ y4 P3 P- }, {
                                        fread ( &Temdata , 2, 1, fp_map);) @+ r$ R/ r; E3 c8 a2 Z
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
* f. @, S. ^% |
0 H6 h/ E0 r1 C. ?2 V% X
                                        fread ( &Temdata , 1, 1, fp_map);
, h6 s7 O& E8 g9 \" K2 m
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
7 t7 _7 h4 O" f- n. z
                                        // 6个字节: H! d4 h( L' H: ^' J- @# Q1 G7 a

5 }" y. s, ]; [4 D
                                        fread ( &Temdata , 1, 1, fp_map);
' \  \; w5 v9 u, |
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
3 o  Z+ A* v& b7 E) q
                                          o9 e& @( T5 M6 @
                                        fread ( &Temdata , 1, 1, fp_map);
. R. ]' A" {% l
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;/ b4 ]! Y+ X& u& d/ L, W
1 j; y0 g( p* c, Z2 v8 O$ A
                                        //fseek ( fp_map,3,SEEK_CUR);
* k1 k7 U9 W2 c6 f/ P
                                        fread ( &Temdata , 1, 1, fp_map);9 a: e3 c: }+ D8 i! Z- x  ~) G
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;- A5 ^* P2 N9 T) i0 ~
                                        " O# ^; M8 S) V1 {
                                        fread ( &Temdata , 2, 1, fp_map);  u9 Q( o5 I5 w8 o$ Z
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;/ M! \& J+ n( H: F( P8 [8 o
7 b8 s9 ~& O# B% ^' u
                                        // 1个字节9 L$ H+ V/ L! x2 \1 p; f) G
                                        fread ( &Temdata , 1, 1, fp_map);3 W$ r* C; g2 w4 P& n
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
' k( t- J8 m0 M9 v! B2 Q2 O4 j
                                        //if (ftell(fp_map) > FilZize) return 0;
( J! y- c: ^5 z) b+ `3 x+ c5 s
                                }; Y4 n. x0 E9 ?
                        }( M/ Q3 R  E! j5 J. q: x$ k" F  \
                }- j7 Q# R/ ^+ @3 X: y1 r+ N4 {; H
        }  V+ k" \# H2 z% ^: ]7 k  P6 k* Q! N

9 Y3 r. l& S1 n  c1 D0 f5 I
        fclose(fp_map);
) D& A2 |% X$ w% ~6 c# I- E

" Q7 s# G$ ^! x& |9 F

  l1 }4 ^) K# }- y! x" P0 ?
        return 1;9 ~! j1 F* h; Z8 g
}

, ]6 S, N6 T9 t: g' u. Q
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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