游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
% R9 L. w# J9 {& W4 x
  p) q. a: a" T7 L' j7 o; r7 R
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
3 v# T7 Q9 V' D& G! O: B
& f. B6 e+ L" E1 f8 y9 }2 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 地表一层的序号2 ]7 R/ U4 Q& C3 r: a, t7 x, V

; G/ k' }1 U' _( e9 o2 }- [" }
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号' H$ r6 r# b5 U6 Z- T
07      在地表二层 12 01 这个大序列下的子序列编号% Q9 t% ~% P6 y7 G/ S6 p
86      物件层的大序列
- \+ i: p8 E+ {8 F# ~; S) {# {
00      物件层的大序列下物件的子序列编号
' A5 i% i9 f' `- h( U# k! H1 l- P
03 03 00  目前不详
# A& [; F! m; B0 O$ o# N3 Q
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。' l4 \3 j: K! ]) ]; j
' @5 H& K3 ?( k" ^$ w4 {# K
//************************************************************2 W8 F' d2 H2 V% g$ i- [
// 加载地图基本数据函数;
2 X( p" ~5 ]7 d5 i8 A
//************************************************************( E6 e8 v( ?' I. O
3 K" u. o' y1 b0 |1 p
//************************************************************
3 o( M' Q. S0 w) T$ P5 e
// 加载地图基本数据函数;9 U$ N1 F6 W" `+ m# a
//************************************************************
8 \' R2 P& E8 }' U

7 W* F' O& C' D2 T
int Cmap:oaddata(char *filnam)
) }+ ~4 o0 x# [6 D% @( H
{! X( }4 {" H* @
        int Temdata;
* S5 y5 c- a/ V5 S' U! G6 e
/ P- `8 _! I3 H4 c; i! n
        if(filnam == "") return 0;
9 C( w$ Y) ?8 H- j: S
/ q: X+ I+ v/ q
        fp_map = fopen(filnam,"rb");& E5 z& Y; ]4 n6 c) q
  N4 a* N6 j4 q
        if(fp_map == NULL)        return 0;. L! p/ y9 z4 h- r& \! k
5 s! y$ G. |, E
        fseek ( fp_map, 16, SEEK_SET);
( J: {! U0 F) F, c! U7 b4 x( y
        fread ( &ShortWidth, 4, 1, fp_map);2 h: m, k. B" n" s( X
        fread ( &Width, 4, 1, fp_map);  M0 D$ p% w* D7 X
        fread ( &Height, 4, 1, fp_map);+ n' p' W; N0 H5 P8 M% v) v2 a5 g
0 B* l; z6 `& d' S
        int TW = Width / ShortWidth;! p( o: @3 V9 B* u
        int TH = Height / ShortWidth;! P! t( p& `( H$ ?- j9 `

7 v: f! U1 A9 T6 r
        for (int j = 0 ; j < Width ; j++)
+ S: D- G& W, k# m- p8 O
        {
: n" }/ C+ E( b0 p7 Y9 e6 v
                _DELETE_ARRAY(Cell);9 |7 V( j9 l! R+ U* w2 O' O+ N2 @
                _DELETE_ARRAY(Role);
6 ~7 ^9 Y# O# Q/ U6 P7 P
        }: u3 E0 O0 z& X/ \+ ^3 v3 q% q

, d8 z/ f' ^4 |* A7 x
        Cell = new stCell*[Width];' f3 q2 P: d' O, v
        Role = new stRole*[Height];
* x- R( Z3 E9 A8 D1 c9 m
        for (j = 0 ; j < Width ; j++)8 z% l1 b, n1 A; ^% V
        {
" R, m0 N2 g  w( ^
            Cell[j] = new stCell[Height];# u' J* c4 L: [0 e
                Role[j] = new stRole[Height];        9 a- {9 b- L8 \; H' A
        }        
# V& M" ?/ N$ W
, q9 ?3 S' T2 F7 w3 s4 Z1 R
        fseek ( fp_map, 28, SEEK_SET);' {  I8 s9 k: v4 K3 o  R
. z  g6 i  A- e5 y) {, B0 I, {
        for (int y1 = 0; y1 < TH ; y1++)
- @# r# u9 B/ v( Q
        {
( A' L4 F$ q. i& V5 K0 O, Y2 L
                for (int x1 = 0; x1 < TW ; x1++)$ q, u( Z9 J! s7 \# G( n6 N
                {
( A! E3 W0 y1 i2 X) j8 }
                        fseek ( fp_map, 20, SEEK_CUR);
5 q: j9 `, s1 {# B4 g
                        for (int y2 = 0; y2 < ShortWidth ; y2++)+ v8 S" V0 [; u6 v2 w% U5 k  G  |
                        {/ A+ [& w8 ]5 Q
                                for (int x2 = 0; x2 < ShortWidth ; x2++)1 r  c( m. z- _0 E1 z
                                {! }- M% `' `! U: j1 `% x4 K9 G
                                        fread ( &Temdata , 2, 1, fp_map);% _0 w  ^7 K5 y$ w4 K; S
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;/ x+ g$ [# B1 |* F# U7 D
4 Y) j! r* C$ L; m+ a: f  e
                                        fread ( &Temdata , 1, 1, fp_map);
9 W* |9 d) R7 F1 |5 T/ K1 g
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
! R6 [: V* W. a' }
# n0 f3 P) y# w, Q
                                        fread ( &Temdata , 2, 1, fp_map);' e" l0 X- Z. P' s
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;% B; P/ h2 s9 R5 G( y; h
3 S& S' N9 h% O$ L$ i# l) H, |! p2 h
                                        fread ( &Temdata , 1, 1, fp_map);
7 Z5 J: F1 Q% }5 R( f0 I
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
' A# t* v- E% H. d: }' `
                                        // 6个字节
! j4 t+ O) f4 X% ?7 L

! }; \5 a, R/ ~  B- f3 t- T
                                        fread ( &Temdata , 1, 1, fp_map);
7 B1 s0 a# j9 H' O
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
  A: _! I/ i! x* I0 `4 K, N
                                        3 q) _" N/ n# k1 ~% y  f" S- k$ T
                                        fread ( &Temdata , 1, 1, fp_map);
# L" ^! V$ a$ f9 K8 y( K$ U3 {+ e# D/ Z
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
' |+ q# {' M; M6 [* W" O

7 c. v$ X# w  p# \* ^( e- e' a* e
                                        //fseek ( fp_map,3,SEEK_CUR);  [8 q% Z1 Y$ N3 B4 Z9 ]; `5 q
                                        fread ( &Temdata , 1, 1, fp_map);  E. S% |" y8 |  G
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
$ ]) ]" {* F* l, y" P2 R# p3 |' ?) J
                                       
) S7 o8 f1 e. e6 K
                                        fread ( &Temdata , 2, 1, fp_map);9 @- B2 d+ \1 C, s  b3 a
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;6 y* Z; E4 B9 c6 S  f

2 k" v. c) l4 |& ?+ J8 G. o
                                        // 1个字节
2 g$ S0 U1 N: R5 D* N  {
                                        fread ( &Temdata , 1, 1, fp_map);
8 N2 f& J: r# \
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
  ^' z/ ~5 Y. S
                                        //if (ftell(fp_map) > FilZize) return 0;# B* c9 h' I7 x/ a
                                }3 K5 j+ y8 `6 N1 z6 e; ?
                        }
3 d) z, d; P+ b
                }4 m3 I; t# J3 f
        }
) }! y$ v/ ]0 R" y

! ?1 z) {- ?5 }0 n. D
        fclose(fp_map);* k, [, |6 S4 X+ c; c

! t& h2 D4 x. J2 G0 ~' J  t
' {( g: \7 m* d4 r5 [
        return 1;
' U. G# b# `7 H- {
}
; j* Q- e4 h* U; r7 M! G
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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