游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。$ U  `) Y" C: I: D6 D, a. [
1 F* j  [+ V' z7 R- U6 {
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
+ s/ o  V/ |  H/ W: R

% L1 M# I  n( l- [, R5 U& ?
    第 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 地表一层的序号, s; b  }0 y# \0 h" X$ ^9 i
0 w' m3 l( d& R$ ^
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号- }3 q. b% {/ o3 q  p
07      在地表二层 12 01 这个大序列下的子序列编号
& E; A1 A$ O- R& Y4 S* o* e( h
86      物件层的大序列2 S! q. T% o$ h  s* F: B
00      物件层的大序列下物件的子序列编号) C: i: O% J1 d/ t9 N# s( h3 t8 L
03 03 00  目前不详! |0 d4 e3 f9 f7 l7 p1 }
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
9 {3 |& G8 ]- K" O8 [4 t. x

$ ]" o( |3 g% u1 x7 z' {2 A; X% b
//************************************************************5 g( [/ U- m" Y0 u& H. ]
// 加载地图基本数据函数;
* ?4 y& }! ~% p* Q& V
//************************************************************
3 t( O" N5 c5 g7 A
% d6 i6 O$ x! v  }& G2 Q
//************************************************************2 X; I/ D' H9 a+ b* b
// 加载地图基本数据函数;
  [* Z$ {- j7 s' c
//************************************************************+ T5 L& D* f8 B+ A0 `, r# }+ x
" i4 Y2 V0 G/ O3 ]/ J  r) I, W# t
int Cmap:oaddata(char *filnam)
4 `! r% }/ q+ p1 F7 _
{
& }3 p+ p/ N! g& l) S
        int Temdata;
) X' }8 j) V, b& a) D" ]1 o7 _

0 Z& U+ Z& h5 z3 \+ {& @9 B
        if(filnam == "") return 0;
% S, x5 z9 l( N4 P# ~5 f
) x  Z* d6 f- L0 h: N" B( D
        fp_map = fopen(filnam,"rb");
5 E" y+ j4 g6 \$ A& O  f
, m2 X# l# L- e/ Z# c
        if(fp_map == NULL)        return 0;
) P  ~  }7 I' d  k8 I) F

. A( d8 e* X% |
        fseek ( fp_map, 16, SEEK_SET);
- }, a5 U' W  I- |" v( U- ?
        fread ( &ShortWidth, 4, 1, fp_map);
& r  k# C- h6 E  i# y- x: w# X8 Y
        fread ( &Width, 4, 1, fp_map);+ _- U) x5 U7 L* h0 V4 F
        fread ( &Height, 4, 1, fp_map);) s; L5 Y& E. e9 l) H

7 i6 ^# J4 {1 f) D8 @' F
        int TW = Width / ShortWidth;
( [1 |( O5 n/ P5 Z4 m
        int TH = Height / ShortWidth;
7 ]4 E" G/ H4 h/ z. R2 o. t

$ M! b  f, T) U1 r# h' D6 s
        for (int j = 0 ; j < Width ; j++)
& n7 l$ K8 o6 G0 r
        {
5 z5 h& A( c* E* X
                _DELETE_ARRAY(Cell);
8 C  k& z' \. G) o0 X  B7 x& Q
                _DELETE_ARRAY(Role);! C6 V/ C7 ?, Z8 W: q- N. r
        }8 I% R; t( B- K1 y- X

! D- h; F! q/ A) a: k
        Cell = new stCell*[Width];
9 Z9 a3 |) J" ]; G& c0 o
        Role = new stRole*[Height];
4 i1 y) C8 [" c4 M, `
        for (j = 0 ; j < Width ; j++): a9 b1 _$ c, l7 J# o" ]
        {% V" w7 O. v( @& I
            Cell[j] = new stCell[Height];+ V' |0 X2 _9 J0 h$ S
                Role[j] = new stRole[Height];        : n' c8 l: j5 l- d1 n, [) p2 p. v
        }        
* ^" C& I; u" `5 w9 F8 S5 o5 b
( |/ F; I0 X6 e2 }7 o5 o" u8 @
        fseek ( fp_map, 28, SEEK_SET);
$ S# Y+ K- ?0 _6 y  m
: @* H9 [2 _. s2 q; }% l+ B) N. \
        for (int y1 = 0; y1 < TH ; y1++)
' O0 P$ A$ y% C( V' X: k
        {
( N" t" r( h, O2 o
                for (int x1 = 0; x1 < TW ; x1++)
$ @8 N% B  s! H& G; t
                {3 k& }! _* D8 ^- G1 j
                        fseek ( fp_map, 20, SEEK_CUR);& {0 y  ?! R' a  h
                        for (int y2 = 0; y2 < ShortWidth ; y2++), ~, g5 J2 X! g6 U% m
                        {
2 F- ~. z! b& K3 \( x
                                for (int x2 = 0; x2 < ShortWidth ; x2++)% S( O3 R, [3 ^" U0 Z" W
                                {( A1 r) E( s) U; `7 Y& S% |8 ?. o
                                        fread ( &Temdata , 2, 1, fp_map);, r9 R  P1 j: W% Y4 h
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
! T2 g; E+ ]: Q

4 I& }8 j5 {0 n8 T
                                        fread ( &Temdata , 1, 1, fp_map);* D/ s+ `4 e% W5 l- i& M, l
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;( m8 I. g- o0 V: g" B* ]

) U% B5 e8 {7 W) Z, o1 V' y
                                        fread ( &Temdata , 2, 1, fp_map);
0 P2 n; v1 A# O+ I" U, y2 L9 B/ G- L
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
, X: b% Q: K9 h! P9 e
9 y- r5 h/ j) I! G
                                        fread ( &Temdata , 1, 1, fp_map);
* v# C% Z3 z) G6 O' e
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
5 M) s1 R: J/ N
                                        // 6个字节7 o3 O" B# c% c3 i) s
: Y0 s& Z2 a# }
                                        fread ( &Temdata , 1, 1, fp_map);# Y% T- ?7 B; J! ]! `, a
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;3 q% p# T0 t% o: q3 P
                                        8 D7 z5 e1 W% F. J7 @* w
                                        fread ( &Temdata , 1, 1, fp_map);$ O3 j4 U( B4 D$ r9 M; S2 m
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;7 F7 x5 h- p7 B. I: S

- {% @, W5 N% G( N$ d. K- A  O
                                        //fseek ( fp_map,3,SEEK_CUR);% j# p' B* J: J3 t
                                        fread ( &Temdata , 1, 1, fp_map);. B  U3 l9 v& t. a% r5 g) B2 V2 G
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;5 o3 c- j) j1 X; a8 U" v* A
                                       
$ p- Z7 d. s0 i( b# U) M; U5 ^. e
                                        fread ( &Temdata , 2, 1, fp_map);% R# q8 L) u8 K4 U
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;! |$ @0 {9 K. }  f9 K0 M* y
( [2 |* H$ P# h. F+ v1 r1 [# L
                                        // 1个字节
/ \. F( J% }0 a6 P. C7 e
                                        fread ( &Temdata , 1, 1, fp_map);5 K: o/ i( k" x) y
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
& U. R. H+ u2 H) ^5 r. X; O( H
                                        //if (ftell(fp_map) > FilZize) return 0;! }6 p# f, g' X
                                }# y8 D4 D7 C5 U9 T% i6 B4 @
                        }
) O3 S( y, {9 U( @5 e
                }1 U% \; \2 ]3 w# L. R7 o
        }
" r) N: A' U- [& ]: V- q
- I. S: \+ `* r$ h& G
        fclose(fp_map);
* Z1 M. \) n3 y' J6 n2 |8 @

% h6 i, e1 W- j- f, R  g0 b
: z! M. L2 ~6 S
        return 1;; v( ?6 U9 o/ b9 Q5 j
}

  A% K7 r& D7 K% f9 g' R1 e
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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