游客您好
  • 点击联系客服

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

    客服微信

    Wkr-3000y-kf

    电子邮件

    3000y@wenkeruan.com
  • 手机版

    随时掌握游戏动态

  • 扫一扫二维码

    添加微信客服

Lv.7 版主
8号会员,9活跃值,2022.09.01 加入
  • 127发帖
  • 123主题
  • 0关注
  • 0粉丝
这个人很懒,什么也没有留下。
独家推荐 更多>

深度解释map地图文件

[复制链接]
异仟年认证商人 发表于 2022-9-5 20:39:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
*.map 文件是记载地图信息的文件。& A, {+ R3 T# p2 s( W
) l: Q8 Q3 W. }. u" i! G
    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
) W, p) |0 R& [- U8 `% j8 g9 T( S0 U# _) x" G5 H
    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 地表一层的序号
" L( _$ B$ `# C
. N' [' r- `# n" i& D03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号) o, Q- `+ k) E8 A( V" h3 O
07      在地表二层 12 01 这个大序列下的子序列编号) v3 j' U# e. Q4 v) _
86      物件层的大序列8 v/ I* F) m6 B3 ]8 M' s
00      物件层的大序列下物件的子序列编号
: _# `" D$ S* p+ k& F03 03 00  目前不详
3 _; I! |( E: \" ]  ?% f) K, o& y01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。2 h8 D3 q. @8 y
0 d, b% w' |. m5 n
//************************************************************7 R; P: H5 c* e, G9 \; W4 [
// 加载地图基本数据函数;
: r  Y1 e6 i/ M6 p//************************************************************
& \; d2 U0 N2 h2 t( q; t! K% A  T  S" f! c3 `5 }1 C" m
//************************************************************3 q3 h( G4 S5 s8 q- n9 N$ K& h8 p
// 加载地图基本数据函数;2 Q% f  }. k8 x; P" e9 ?
//************************************************************
7 S$ q* r! T% W4 x- a2 E: c1 N
; u5 U0 G! O4 r! a1 W& sint Cmap:oaddata(char *filnam)4 ?# y! J: r7 A0 L! W
{! g. `4 [  f% O' Y/ T8 L$ J; P
        int Temdata;
7 q: B4 ~  m2 @* w; p
& J* w: |8 y4 R+ J- K1 G        if(filnam == "") return 0;
; y4 Y' R/ u, D$ P; l/ V: X7 S, a* C- q* B
        fp_map = fopen(filnam,"rb");
' l$ ~" s& N% P' i5 X& f/ ?+ R  r# q/ r# n' _+ H
        if(fp_map == NULL)        return 0;
' N2 B  n. I, @' @% R( L6 m! z% `/ _8 V3 J7 }  K  {
        fseek ( fp_map, 16, SEEK_SET);5 U) Y: Q/ `( e( C- ~2 O) A+ Z
        fread ( &ShortWidth, 4, 1, fp_map);7 i& }/ W9 U/ v
        fread ( &Width, 4, 1, fp_map);: k- j$ Y, ^- c* n+ j
        fread ( &Height, 4, 1, fp_map);# _5 {  d: G' l' u7 S
. d4 _7 Y* d) }/ A# A: n+ \
        int TW = Width / ShortWidth;  h) F% B9 w/ R0 N+ x1 _
        int TH = Height / ShortWidth;
( _# x$ u; t- H# y+ j5 [' U- o" L4 N0 Y0 h  c& R) `, b
        for (int j = 0 ; j < Width ; j++)
, Y5 \8 L$ R( w2 r) D- r        {
, E1 v7 m. w( J: \  S2 _                _DELETE_ARRAY(Cell);/ p% Y/ [+ O% X/ w- ^( x* P% H
                _DELETE_ARRAY(Role);
- m3 V  W5 I6 O        }; u% {5 L, k9 Q% ^6 A

" j  h- F& e/ L, C. }, m        Cell = new stCell*[Width];
. A- P/ [8 N( W* u        Role = new stRole*[Height];+ T$ ?8 ?3 Y4 k4 _1 ?
        for (j = 0 ; j < Width ; j++)! ]% _7 k8 N- h: u' n' A
        {
( u& r, F' K" g3 t" Y' i3 k! t            Cell[j] = new stCell[Height];
- \; r' P' u  }* p                Role[j] = new stRole[Height];        
* L. s1 c$ a6 c+ m  ~: @        }        4 e! o, m9 R- g* J$ N% a1 O' N

1 d5 u3 Q0 ?0 B  y) u        fseek ( fp_map, 28, SEEK_SET);
5 M2 i5 S1 C  o7 ]/ _! s
/ U$ o* G6 ]4 P# i0 |" m        for (int y1 = 0; y1 < TH ; y1++)
/ s) r! t; I# g& A/ w$ D$ b        {
1 {; R6 v# }6 j4 X9 c                for (int x1 = 0; x1 < TW ; x1++): ]1 Z. L. j$ B4 x
                {- [" i+ R7 i4 m1 a0 S
                        fseek ( fp_map, 20, SEEK_CUR);1 R) w9 D! q" J& f& w4 A( A
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
# b3 _# s" l; g. q' F                        {
, j- N2 K1 ], A6 |' {                                for (int x2 = 0; x2 < ShortWidth ; x2++)
, R, b% ]; R) S5 G  U# j7 k* @                                {
$ _6 h+ p. n4 j  w1 I& S: m                                        fread ( &Temdata , 2, 1, fp_map);
" @- s- ]* h3 O# s) w8 j& g                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
7 i0 O- P' m" e. |7 S
5 O; ~' W5 [3 h3 _. x- f                                        fread ( &Temdata , 1, 1, fp_map);
, u+ T6 b4 c8 d8 a7 H                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
7 Z8 Y( T. T$ x% U; w9 u; j# ^! C0 }( b5 \9 v& t
                                        fread ( &Temdata , 2, 1, fp_map);  x) [4 x" \" o) a- e0 u; }% d
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
  ]+ e, }0 v/ n3 o# t7 \' W8 g# n( g
+ A  x) g9 n4 s                                        fread ( &Temdata , 1, 1, fp_map);
: M1 {, T; J9 c3 ~9 R                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
) [. }4 a9 O; O: `& r% @                                        // 6个字节
7 Q) k* J2 Q8 L9 O+ H/ h( l3 _. r; k  u: D, R7 ~6 `7 i
                                        fread ( &Temdata , 1, 1, fp_map);
4 w) N0 w% \: y' Z% d% R                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;  O: q( c; U  \  D# y6 B. r( s
                                        : @8 L" v* j( c* e
                                        fread ( &Temdata , 1, 1, fp_map);
7 M0 F- {! a. m1 n% a& x+ i- v& x$ j2 w  k                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
" b* u( n9 i# I, E5 [0 W2 z) B  v5 f
                                        //fseek ( fp_map,3,SEEK_CUR);6 m8 s! }' t% A$ j6 W
                                        fread ( &Temdata , 1, 1, fp_map);
$ H3 q' r( {1 }7 l                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;; o4 X* w8 X3 g" @7 F
                                       
3 @3 h5 S) h& d: O/ z& N                                        fread ( &Temdata , 2, 1, fp_map);; Z$ B5 y, \- k) T8 `
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;# O/ r' F$ q/ x* i6 ~
  F8 ]( T7 C# h& z9 u, M9 Z
                                        // 1个字节4 J7 Y3 M# M: D1 `! U
                                        fread ( &Temdata , 1, 1, fp_map);
# }- ?  F! y; l& j4 m                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
8 m3 d# T1 F2 T. }/ y0 a" G                                        //if (ftell(fp_map) > FilZize) return 0;3 S1 k4 I: ?7 K" A' M
                                }/ P* o; Q/ t) r( [; |" k
                        }. f+ f5 ~+ [' Q
                }
: q. C0 u9 u2 v% B7 {        }, E. P  E, O- v5 @6 ^

; q4 L& Z) x9 }7 n8 r- n% x        fclose(fp_map);4 w% G5 Y% w4 x/ w3 m+ i, e
2 t. {- |' f. F$ t3 E2 \% v8 D7 k2 s+ J
/ b4 X6 r: U: \9 x; c* ~
        return 1;
) x8 ]% [( t; @& g. U1 O2 @* h$ H* c}

( x9 P3 t, G2 L& a3 y4 l$ A
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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