游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。  I( D7 S6 e, c5 B3 C& n. }

2 v9 G1 Q, a" {+ E
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
' O, F* P3 J. H# }# X
  s* O) I1 ^- E- E8 I( A
    第 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 地表一层的序号
1 ~* s) }. v! ~. ~: _. J
4 t7 V0 c: c0 |5 j
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
! C) A6 {7 P0 J% `1 A- r
07      在地表二层 12 01 这个大序列下的子序列编号
6 M: s' j! O0 O' G3 I1 b3 F
86      物件层的大序列: `+ D! Z3 B) V) [' G% l% f
00      物件层的大序列下物件的子序列编号* k' I% s$ v6 J
03 03 00  目前不详8 i7 k+ p$ s# ^9 L
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
4 e' |5 L- S7 ^" t& |
: b$ D3 t- J4 c' i+ a) h
//************************************************************# f, p" C5 ~4 W% X
// 加载地图基本数据函数;
, ?4 {: I; k/ c. D9 P7 ~) i( F
//************************************************************. s+ Q9 m$ X' r" f$ }" D

; Y8 j" ^( f9 m4 ?
//************************************************************$ Z5 H# a/ S* k( a- N4 z
// 加载地图基本数据函数;
1 b; F7 Z2 F1 C. w8 L, q" K
//************************************************************4 E, g5 ]. g  w" Y7 i! s

! }* Z% ?! ~2 N7 }' `3 o+ ?
int Cmap:oaddata(char *filnam)! o0 E8 l/ [& Y( H7 Q5 |
{
9 o: ?) \, ?+ @
        int Temdata;- s. |6 E4 M5 j5 O
8 R  `# ^% E8 y
        if(filnam == "") return 0;
  {+ L4 z) q4 o2 u4 u

9 }; A( e/ [& G1 f
        fp_map = fopen(filnam,"rb");$ K" G, ]! Z1 A1 k  {
( x* y7 F8 G! Z$ W2 }2 C5 V
        if(fp_map == NULL)        return 0;
8 P* ^, }0 @# A0 R8 V4 k% L% u$ v

2 W+ C3 }$ q: F) @3 S
        fseek ( fp_map, 16, SEEK_SET);
% g+ I" f0 s; K! w1 H: p
        fread ( &ShortWidth, 4, 1, fp_map);$ }/ N$ Q8 f# p. Z. m
        fread ( &Width, 4, 1, fp_map);1 j8 Z, B! B+ i/ f' {# K4 ]! ?4 W" i
        fread ( &Height, 4, 1, fp_map);3 q1 V+ ]7 p  Q  C) @1 f  L! [

. F& o1 k9 D/ a$ D
        int TW = Width / ShortWidth;
+ E" o$ i6 ]9 c# C
        int TH = Height / ShortWidth;
7 @' T2 v0 z. z* \# ?/ H6 q

5 }6 B0 K: s) D
        for (int j = 0 ; j < Width ; j++)
& H0 e7 T& T9 O2 s$ J" }
        {0 e& t; d3 z/ }3 z
                _DELETE_ARRAY(Cell);1 U! Q3 |/ Z6 h- K: E( U7 n2 ]  i
                _DELETE_ARRAY(Role);# e8 w9 W' R, t( s% u
        }3 u; X! H3 f, c0 A6 Z2 n, j% N% C

! e, x4 f3 M9 j  K# }8 G
        Cell = new stCell*[Width];# e3 h) z* R; V' Q; s8 h" @3 r
        Role = new stRole*[Height];; a) o( r$ F* V
        for (j = 0 ; j < Width ; j++)/ o# S& [4 s! w, l+ d  C# {
        {
2 p" c6 D7 A. |2 X" A
            Cell[j] = new stCell[Height];
: ^9 S3 ~& d4 w8 r8 I/ F
                Role[j] = new stRole[Height];        5 u1 x- c  O( z0 c
        }        
4 q) l, [8 o5 Y% `0 |  x, l1 Q( K
/ o* H- `) _2 Y0 M5 J* |
        fseek ( fp_map, 28, SEEK_SET);8 C' T( \1 l5 Y& ~  y) E
+ F+ Y. E- C- u1 X
        for (int y1 = 0; y1 < TH ; y1++)
; p7 [( }/ \- n" N9 F" ~
        {
  f6 Y/ M  j7 _# h( L& H! L/ K
                for (int x1 = 0; x1 < TW ; x1++)3 L. q/ s0 p- p, j% A: D; G' z. B
                {) F3 y" e, _! D
                        fseek ( fp_map, 20, SEEK_CUR);4 L1 S3 ?+ M% [3 U
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
4 W0 A/ F5 E7 O/ E
                        {
- Z4 B4 n$ o  S8 ]$ v
                                for (int x2 = 0; x2 < ShortWidth ; x2++)
5 c( K* g" O# P9 @  e: \8 m# @8 E
                                {0 n. p% o7 e0 w( Z$ b% |
                                        fread ( &Temdata , 2, 1, fp_map);
7 r! p8 c0 t0 U: f( U
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;) R8 V6 G9 x8 g( [" T9 ^3 r
5 s+ R( `& J4 F! N& u7 M& _, j
                                        fread ( &Temdata , 1, 1, fp_map);0 H' i% j, p" Z3 J# t, Z) g" q
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;0 d9 w6 I+ e, f# W( a& |
& O5 v) h9 k9 J: t
                                        fread ( &Temdata , 2, 1, fp_map);% ~* j4 Y2 I* U4 ?
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;3 W: k/ }/ B( Z/ j& D; ^
9 E: ^. Z4 H- U  w/ s5 g, x. t& x* g3 I
                                        fread ( &Temdata , 1, 1, fp_map);, X3 o3 o  b# V9 l0 Q6 h: r# D/ s: B
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;. L: |( A7 ?# w9 D$ `; l
                                        // 6个字节
8 s1 l+ L! k9 C

$ j2 Z- B4 F6 z- x
                                        fread ( &Temdata , 1, 1, fp_map);
) U8 b8 X( u) v
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
0 a1 D  O' {% o2 e! b
                                        2 q) k5 J  L) s7 t9 m! V5 ~
                                        fread ( &Temdata , 1, 1, fp_map);5 @; Z: g6 Q" j4 f
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;! I) {  R& K! Y1 k( ]
4 x9 x7 J+ H8 i( ]* a" t
                                        //fseek ( fp_map,3,SEEK_CUR);- g2 ~- H5 j4 r# \/ |( T
                                        fread ( &Temdata , 1, 1, fp_map);- b$ n+ z' s2 a" Y. U" H
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;" o* K0 O' h1 @; H% w* P$ j
                                          Y" D) U% K2 X6 Z9 `  k2 D5 l/ I' v) f4 j
                                        fread ( &Temdata , 2, 1, fp_map);& A) _! a  y/ U. q% C
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
( ^" C9 n# F5 L  [. w4 L

9 [" c# ^2 H! B: e( v" x
                                        // 1个字节( _& l2 j" H+ R) y% b5 y
                                        fread ( &Temdata , 1, 1, fp_map);$ m. P5 j: z2 d# }
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
) i! t- u/ d' l5 S0 H
                                        //if (ftell(fp_map) > FilZize) return 0;
) s3 z9 A( ]. ]! O
                                }6 m1 `' w$ u' A
                        }
0 ]/ z$ C) |' @, i# M2 \
                }
# V% v) f; K) g; F
        }, t, a1 M$ T  [" I9 d3 k( |1 I

; `% q: g: A. P1 B9 n: e7 \
        fclose(fp_map);7 ]0 ?- m3 M1 @4 J0 w
0 c- j: M5 O; c

1 ~- }8 L- u6 d1 `
        return 1;7 a, h+ h( y( |" X8 g: E
}

) u* s! P& e: u, a) Y
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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