游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。) D! K. \9 i+ H% R4 m
: l6 r3 D8 ~* Q( x' J
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
/ b/ O" ^5 L+ r& S9 u, S

+ \4 j" Q8 O# H( D7 _6 O( x
    第 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 地表一层的序号
0 F9 [- w0 C- T' i: d1 [) [6 e

. F, V; m$ F# ^  Z& ]+ a! v3 t7 D
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
; d; [9 _* J8 N
07      在地表二层 12 01 这个大序列下的子序列编号
* u9 _8 p6 s) a; T
86      物件层的大序列
8 C- f" A- t6 ]: Y7 X" k  D
00      物件层的大序列下物件的子序列编号
& S: s9 m5 E' h$ `: d
03 03 00  目前不详2 h4 z7 u( s1 I4 M  A* |) ^
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。3 E* o+ i: v& Q* i. g. S( S: s- g! L
  g3 p" h; p+ t4 @& {
//************************************************************
; e+ A/ u) S7 G( [
// 加载地图基本数据函数;5 O) e3 X& q& ~- g% ?  Q$ Z* p6 K
//************************************************************
& M: K+ a$ U! l- i
0 H* \1 Q: \8 V8 E1 o8 N
//************************************************************6 A' o) f6 R: J; _& o
// 加载地图基本数据函数;7 s7 v- L4 q; T9 m
//************************************************************
9 @, R5 C: u' I% n( [

0 T) N' j# H7 A5 K1 V
int Cmap:oaddata(char *filnam)
+ P6 u. W$ @3 \: n3 n( F) x
{0 x, L* f/ d/ n2 e
        int Temdata;# `; l& X. u+ r- J
3 L# G6 H+ L; T- e* f4 ?) }0 w
        if(filnam == "") return 0;: R/ z+ T( t  ^; e

2 q: P: h: _. q: ?$ h9 b
        fp_map = fopen(filnam,"rb");
8 W6 W% i2 O2 u, k$ E

7 u+ F- \+ ]! b  a
        if(fp_map == NULL)        return 0;
! y8 a; N% ], c- {+ E- f
0 k: o8 r6 d" U( _/ y8 r, r5 R0 f
        fseek ( fp_map, 16, SEEK_SET);
: o$ X( I. ~% |+ m7 ^' F" C
        fread ( &ShortWidth, 4, 1, fp_map);
; Z9 Z1 N/ C: \- s% v$ z; K9 s
        fread ( &Width, 4, 1, fp_map);
6 ]/ e: a- o' t3 |9 u
        fread ( &Height, 4, 1, fp_map);
% w0 k9 ]7 c5 \8 |7 J' i# v. \
. j9 Q+ M/ q& P! T  \
        int TW = Width / ShortWidth;
5 X5 n8 Y( X, C1 f" P) Z
        int TH = Height / ShortWidth;
% l2 l" U/ }$ q8 H6 k9 U

, m, X% h- c- s6 O9 y
        for (int j = 0 ; j < Width ; j++)8 K# P. ^) j, y$ ~! m$ P
        {
- ?- j/ Q- j1 V
                _DELETE_ARRAY(Cell);
6 |% H4 ?/ U+ B+ K4 l5 V! X
                _DELETE_ARRAY(Role);9 E' N7 ~$ X- g
        }; y# F! G2 z" C

. E1 @7 g& @. z7 e! O
        Cell = new stCell*[Width];) K. q& D# g) y% |- x
        Role = new stRole*[Height];
& k; b% ~% X4 s. B' ~- e
        for (j = 0 ; j < Width ; j++); A3 ]* |  D' v- Z/ @
        {
5 ?9 _3 J3 y! ~& @" C- J9 l5 t2 K
            Cell[j] = new stCell[Height];) O1 C' I3 I6 ]: c0 P- c( {
                Role[j] = new stRole[Height];        
+ G$ |+ p" g; T4 n7 G
        }        4 U, W; m4 b7 }9 g4 v# v- J
2 O& ^) p3 d! u, G, u" d
        fseek ( fp_map, 28, SEEK_SET);5 l" g! K2 {7 D5 B
! L! e+ S5 A/ e+ A
        for (int y1 = 0; y1 < TH ; y1++)/ C+ x7 H5 R6 M5 Y% y+ O1 X; b
        {
# }/ ?" d! z( V( x
                for (int x1 = 0; x1 < TW ; x1++)
' ~# n* N/ @, K9 ]- t2 W8 i
                {- Q4 f+ |; p  z5 J, g% j
                        fseek ( fp_map, 20, SEEK_CUR);
$ l& V# e3 o  Y. u. H7 A2 X' g
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
; a8 o( F" u. n. L+ j) G
                        {! b. L8 I* X' R. h0 o
                                for (int x2 = 0; x2 < ShortWidth ; x2++)7 f) N6 |( K3 V( d
                                {! [- h3 t6 p, R0 @% X
                                        fread ( &Temdata , 2, 1, fp_map);5 a! g8 \4 _$ h" I. L# _
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
/ N+ @, H# H4 v, w; e$ D
2 ^" k5 C# e% _/ a
                                        fread ( &Temdata , 1, 1, fp_map);
2 W0 Y6 Z( |- M- c- t9 P+ k5 L
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
8 u. f) K" I4 ^* l+ m% a6 y7 p

% U6 K2 v0 o4 K1 |, _$ a
                                        fread ( &Temdata , 2, 1, fp_map);
1 V- w$ A* u/ M/ {
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;3 u7 v( v% E& ?9 ^8 ]0 V1 U* s
( B: F: ~6 c) Q- i# |/ p( |
                                        fread ( &Temdata , 1, 1, fp_map);
6 t9 U% G9 P3 e/ O
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;: n4 \  O* D6 [  Z+ Y2 T
                                        // 6个字节
1 z  [. p' @' n

7 D  V4 v! l! N- l6 x& M1 o
                                        fread ( &Temdata , 1, 1, fp_map);* D* T$ n/ e9 _# d' U; p9 k2 V+ s
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;/ `5 d. @# V" N: J) n7 @9 |* U; Z
                                       
0 \$ k& ~6 h( L5 c6 t
                                        fread ( &Temdata , 1, 1, fp_map);" C0 ?8 C! w* _0 T. r
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
' b, U. m  t. P% J/ b- v" f$ L

: h& S0 H7 `* n- I
                                        //fseek ( fp_map,3,SEEK_CUR);
$ b7 f. ^' M0 u' u0 S4 W
                                        fread ( &Temdata , 1, 1, fp_map);
$ A/ C2 r) n6 l
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;" w$ ~$ B# c/ `
                                        & L0 K' ^! V- l- e* R8 t8 ~1 @
                                        fread ( &Temdata , 2, 1, fp_map);9 @  y. w, q& U+ b6 U
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
7 ^) D+ d) E4 y
; V; j: M, p( {, l6 Z& _/ b
                                        // 1个字节% G) l' K" [% g5 h) Q3 Z0 x
                                        fread ( &Temdata , 1, 1, fp_map);
/ b- D. v7 E. ~* g6 F2 J
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;* G+ n8 b3 C1 T2 t3 \7 `7 `# H9 F
                                        //if (ftell(fp_map) > FilZize) return 0;
9 @* \+ k# M4 S# Z3 J9 H
                                }6 ~! i% b. a; ]/ B+ P( G
                        }
/ ]+ E3 X0 [8 E, N( j
                }
! W! ^7 A0 p9 w$ H4 ^
        }
2 v( f; M0 A1 E& c, X$ e

: g3 Y6 B, y3 C! p& Q1 d( s+ n
        fclose(fp_map);
4 q# |8 S" d6 N: T6 d
0 G$ H9 o7 F+ K/ X/ L7 X3 d
6 {; K& w% y# x) Q- ?; s  N, T5 ?  }
        return 1;, L4 o+ B* {. u6 i
}

' D8 d+ g* Z. b# j% Y; X1 p
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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