游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。" U8 \2 X. {: b9 D; t
$ o# ?. s1 h# {* g$ n; j
    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。2 A& p( I, L$ a: t1 A! ~2 h
! U$ X/ j* V( C; {2 ~/ z, S
    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 地表一层的序号
! X4 M: O4 _% v; w2 \8 @! w
/ f5 M0 R$ w9 e0 ?& b; i6 v* x$ \03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
% E' j7 y! q  h- b; h! A( R07      在地表二层 12 01 这个大序列下的子序列编号
# U5 w. x" f# B/ v" Q6 K# d86      物件层的大序列
7 {/ e* a% ~- R+ R% |/ E& F% J. K00      物件层的大序列下物件的子序列编号, ^8 W1 x: H4 K' d) L  h8 o
03 03 00  目前不详* Y/ [% W& f9 S9 b1 _$ z! B( p: q
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。5 j% E- r& v+ ?* y: K) r5 q

* j0 @0 \, P8 M# ^$ p//************************************************************/ @# c, f+ H4 ^% g9 ~
// 加载地图基本数据函数;
6 T* s$ E) |& o6 A' x//************************************************************# {2 n5 v7 ~! A0 H$ e

9 t" Y! _9 V" q5 S& ~//************************************************************, ]  R2 U; q4 g& L
// 加载地图基本数据函数;1 m. L# ^6 C* O+ q: g
//************************************************************8 Q0 w+ p7 g# f! b' _5 ^9 u: X
6 s, ^) ^% I$ J  t. b- Q, }3 B
int Cmap:oaddata(char *filnam)
! s1 L0 }! V1 j- h1 U  |{# k8 r0 n) q% }! U' c6 A+ B; X
        int Temdata;
' `  z1 S: g# I$ o; R4 _; n1 `, A: e- ^0 e
        if(filnam == "") return 0;; @" F- J! s! D9 n& t
" D" T+ O# J& q. @
        fp_map = fopen(filnam,"rb");3 M4 [8 Y" b- Z, N
3 Z9 e$ w' k  l
        if(fp_map == NULL)        return 0;
2 Q2 K$ ]3 e) ?) X0 p7 y9 u, g  v% O+ S! }
        fseek ( fp_map, 16, SEEK_SET);" c: [+ ]& O8 n- Z
        fread ( &ShortWidth, 4, 1, fp_map);* L2 l0 O" l# P
        fread ( &Width, 4, 1, fp_map);
) Y1 B' x+ t- @0 b" F0 C2 z        fread ( &Height, 4, 1, fp_map);
0 @$ L+ o5 l- n) M* u! q; Q. _& K2 |& `+ ]9 y
        int TW = Width / ShortWidth;7 G* [) b* ]0 B) }) Y& F
        int TH = Height / ShortWidth;' W  r: g+ N$ @4 M
0 n. Z$ C# o* O! c$ f0 h7 {) j
        for (int j = 0 ; j < Width ; j++), r* |/ y( |8 n; m' g* p0 I) I
        {- b+ }# i) ?) w! F8 s
                _DELETE_ARRAY(Cell);
6 ~' G( A- L  C9 a! O                _DELETE_ARRAY(Role);4 |) _6 l2 ?- {
        }7 T- i) C& ]  C! J
* k0 G9 E; N& h+ e* v
        Cell = new stCell*[Width];( h7 }1 O; j  Z" R4 e
        Role = new stRole*[Height];5 j8 ^/ q% Q2 @1 l0 `: `
        for (j = 0 ; j < Width ; j++)9 \# A+ N5 |7 l
        {
$ I3 F9 U) b' w( M            Cell[j] = new stCell[Height];" [* M2 e- f; H& Q5 @/ Z
                Role[j] = new stRole[Height];        4 }: x4 O+ b0 u% k  q3 m( L
        }          Z& {5 c: f+ }$ r9 i0 f+ P" H4 Q
6 L+ K2 m0 g: p& Y  o
        fseek ( fp_map, 28, SEEK_SET);! {  x* y! o! w0 d, R& B

& g9 ^6 B; Z  n: k        for (int y1 = 0; y1 < TH ; y1++)4 E( U1 _& F5 j) w$ _
        {
6 T& ^" t  r$ l" \0 }                for (int x1 = 0; x1 < TW ; x1++)1 t2 \# |3 u+ D# }3 }! B
                {: q( |* G' n2 R/ J% D2 H. T
                        fseek ( fp_map, 20, SEEK_CUR);
! W& [8 A3 x9 D6 h" Q: F* K6 t                        for (int y2 = 0; y2 < ShortWidth ; y2++)8 m; ]: X) o( p
                        {4 K8 r4 S6 _) }  z
                                for (int x2 = 0; x2 < ShortWidth ; x2++)6 ?1 W4 V; t& F% S# |' v; W/ ?
                                {
; l8 Q8 J2 |) I0 }. i3 D                                        fread ( &Temdata , 2, 1, fp_map);: v" m! p  j/ g2 F. H- W2 M% u
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;+ d* d9 H& p3 D

- h& T  r  q. f+ [. U                                        fread ( &Temdata , 1, 1, fp_map);# W$ A0 N5 u7 j
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;: ~& n( q& z7 I  u. Z
& a  Z, u" ~. s
                                        fread ( &Temdata , 2, 1, fp_map);
, C. ^. c  k: `- f0 x- x( q0 D                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;# |) H4 g+ |1 Y
% a4 D3 X' W( F! _, R8 }3 N. a
                                        fread ( &Temdata , 1, 1, fp_map);6 L9 ^5 v& p$ [7 A+ N  b6 l
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
: R. j) r# h) s) r* ?/ p5 P                                        // 6个字节! z2 f" C+ h4 e4 b

3 x$ m! P; S- {7 G' y/ D6 v% O                                        fread ( &Temdata , 1, 1, fp_map);/ X$ I; u1 v  H" u# u* R$ T
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
) d7 q+ ]) S5 z+ P# g2 c. J+ E                                       
; g0 v5 W" a" f                                        fread ( &Temdata , 1, 1, fp_map);
! z9 v2 k0 j! C1 g+ ~; F5 q6 \                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;0 W1 I9 \  h- Q

+ n7 S. P, i7 {+ {# p" f3 `' R                                        //fseek ( fp_map,3,SEEK_CUR);* H) g' \* f1 S, h1 D
                                        fread ( &Temdata , 1, 1, fp_map);8 `2 }% l6 N; }6 n. m1 ]+ ]3 ]& f- [
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
. ?- N, n2 ^. ^2 Q# Z                                        6 W! G) y: {+ ?4 [0 E: k
                                        fread ( &Temdata , 2, 1, fp_map);% l( e/ N" D8 b$ X' b
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;  Q0 M+ j  l7 B8 R* }. L7 N) [6 c
; @9 ?1 Z  e& n
                                        // 1个字节  Q2 H( S! Q, \) c$ {0 f1 r3 p
                                        fread ( &Temdata , 1, 1, fp_map);- ?5 u4 @: P) O6 O: f9 h
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;0 O! N* b# w$ O) v  P/ I0 C
                                        //if (ftell(fp_map) > FilZize) return 0;' o+ T& |; s1 l  Z7 K
                                }
3 i6 L: `- e8 ^( U. l4 F                        }: ^% s$ D2 f4 J  _8 t
                }
' K; e- M( I5 F4 A1 i1 E        }
9 r: t. K4 B" X/ p) L
2 A" q: G7 C1 f/ a" t; W) Z8 `        fclose(fp_map);/ N, b* D! t5 v' t6 H3 v+ ]

! o& U2 @7 i, ]+ F
4 F2 S1 s! Z2 G5 m0 a% _2 b        return 1;
1 ?0 ?. l# c* {7 i0 P7 ^7 E}
: Y9 X" u' `% {/ [9 v
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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