游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。! a& e( n; q2 C

) x5 K$ T, i  D4 B" e" W
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。( s. a. M, A  {( v! O" N% M) V

' }# C, T: E0 |6 N/ d: U3 [
    第 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 地表一层的序号& O9 o! u8 Z+ ]4 H0 p

& e9 K4 g9 m8 Z, s9 _
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号/ {& c6 ^8 J$ u: [7 F. E
07      在地表二层 12 01 这个大序列下的子序列编号7 [* j- V% O+ l3 r# V; Z1 h9 R
86      物件层的大序列2 `. U9 [; P1 B! V  F
00      物件层的大序列下物件的子序列编号) H' E4 @* g  f7 y/ _2 y/ ~0 L6 z
03 03 00  目前不详
; g6 {9 p5 o  w4 ~+ n+ Z
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。1 ?: K  t; `- d0 m; _! q
/ T% a* d+ B) H! M& \
//************************************************************
: p) N. m0 e' L7 o. K  n
// 加载地图基本数据函数;
8 Z1 m- W4 O" \( ?: g0 @1 U; z
//************************************************************
$ Z. c# A9 p+ n3 y

) S' t( n7 S$ [4 q
//************************************************************7 }% P8 z2 k0 E7 h6 g
// 加载地图基本数据函数;
, v: Y7 _* }/ ], r8 G5 J
//************************************************************
+ H$ ~- |8 k; ~) m! V  p% y8 q9 @' A. ?
0 g( s3 H* J7 ~9 O0 w7 C4 T% A' E
int Cmap:oaddata(char *filnam)# B* K; t+ i, H
{8 C; S2 a% T5 t, L: k5 a. L
        int Temdata;% v4 I3 J4 [  k; z2 e) o; F) g% T

, r! I9 A( [- }' K  Q3 x+ y- d
        if(filnam == "") return 0;
; \8 @, i  z- W: L3 n2 h
3 m* T, b! k) [" R
        fp_map = fopen(filnam,"rb");3 {" a) O' A7 ^- Q, w. N$ i
! j! F9 N8 L; d
        if(fp_map == NULL)        return 0;
2 r+ X5 r' N+ A( @
' e- b. W8 W9 q2 {
        fseek ( fp_map, 16, SEEK_SET);
5 ?  R" K3 x" }: o  |
        fread ( &ShortWidth, 4, 1, fp_map);
" I; ?* S, f( {  g) A: m( G9 ^1 y
        fread ( &Width, 4, 1, fp_map);" X: o: |2 E0 `6 _- ?0 O' E
        fread ( &Height, 4, 1, fp_map);1 a% r* t8 r8 P2 C" }; n

" m6 B% b5 W; G
        int TW = Width / ShortWidth;
; ~0 R( W4 O( A0 R3 O% i
        int TH = Height / ShortWidth;
. s8 h# U. ?0 d; `, D! L% b

- ~7 b, y# f% U. t; _  P
        for (int j = 0 ; j < Width ; j++)) a' e3 D( Z$ ?0 r9 K/ _
        {9 l2 X8 N+ H; `6 e- s2 K
                _DELETE_ARRAY(Cell);
% J1 N( o5 U# W7 j; L
                _DELETE_ARRAY(Role);0 C' l, K2 ?: n* Z' O! K, q
        }
( d+ Y9 l/ ^7 I" J% z4 \
7 }1 \2 @2 O; \. v
        Cell = new stCell*[Width];& f7 k, g" f, \
        Role = new stRole*[Height];5 Y* X; }- s. J
        for (j = 0 ; j < Width ; j++)
3 C" N; j8 \2 K, x. g9 q4 v
        {. K" t1 n/ j3 w8 ^' D/ M
            Cell[j] = new stCell[Height];, ?: j6 F4 A2 c" T8 M" M
                Role[j] = new stRole[Height];        $ E3 }9 R, z2 R  C0 J9 \
        }        
1 ~2 ]; S: h- Y  Z/ t$ Z% i
- P3 ?7 l$ K6 x  e6 P% ]0 y- `
        fseek ( fp_map, 28, SEEK_SET);
& I) O2 L+ X* D- H  e4 z9 r$ m
2 ~* X; n9 ]' k7 W
        for (int y1 = 0; y1 < TH ; y1++)' c7 {8 @2 `6 j( N
        {
# s& \' Y: V+ C
                for (int x1 = 0; x1 < TW ; x1++)
, w8 |2 D9 n+ ^' r0 J
                {0 C* ]2 [7 Q( k$ _, N. C
                        fseek ( fp_map, 20, SEEK_CUR);
! s% `; q6 V7 x
                        for (int y2 = 0; y2 < ShortWidth ; y2++)6 e7 A  r6 r' _7 A+ x& H
                        {
/ M; p2 `( c; J2 ~
                                for (int x2 = 0; x2 < ShortWidth ; x2++)
; H$ d2 x+ E- l
                                {
& C6 E% y3 p: Y
                                        fread ( &Temdata , 2, 1, fp_map);% d/ ^  l) Q) I. o
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;# K9 m% B# P1 u3 I( t

# ~! Q: `8 a* r
                                        fread ( &Temdata , 1, 1, fp_map);
2 p" b0 j! ^) j3 |. K
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;5 X+ e7 n& @$ g

# u8 V) {" r0 S: z' {
                                        fread ( &Temdata , 2, 1, fp_map);
- X/ ]- E: |" z* ^
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;9 P0 Z* Q/ w6 e3 V. g# w

0 f0 V2 }0 }. ^+ l. @2 N
                                        fread ( &Temdata , 1, 1, fp_map);8 m: N; |: p) y4 H+ @7 J1 H7 H1 B
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;6 n4 O5 {- K; F$ R% W- h4 w6 ?8 n
                                        // 6个字节
3 M9 l% d$ W5 i, Z# p
: D; ~# M7 x2 z9 i6 S  S: t7 S
                                        fread ( &Temdata , 1, 1, fp_map);) F# b/ w% }8 X, ]
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
  H  j' @7 _# [6 M7 b
                                       
2 k0 `/ @$ ?2 z9 W
                                        fread ( &Temdata , 1, 1, fp_map);
/ m3 b7 S6 [' b- r& v( e
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
# m  l3 j3 M0 C8 |# R# E& i

" O. V2 W/ I8 A4 z2 W0 I
                                        //fseek ( fp_map,3,SEEK_CUR);" S0 p8 R9 [+ \& O4 @8 ^
                                        fread ( &Temdata , 1, 1, fp_map);
& B$ j5 ?* b( A6 {( X
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;* u, G2 U. u7 v6 ~6 H- F
                                        ) c8 K1 f7 @7 J$ v' v" v( e7 J
                                        fread ( &Temdata , 2, 1, fp_map);& ^4 Z+ h: Q! N3 O
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;& M$ o; m# j! Y& o
. e2 y7 Z2 J+ [7 u% U
                                        // 1个字节
( e* @4 R. w4 u" b* _
                                        fread ( &Temdata , 1, 1, fp_map);
4 A" I7 d7 M2 Z9 k7 l+ Z7 u
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
3 Z0 T  B  S) a, l" W: |2 T. b/ f
                                        //if (ftell(fp_map) > FilZize) return 0;5 }: q+ k. N3 S  q
                                }
" n, ~, Z4 H# V4 K8 `- v0 y
                        }0 T: p6 d6 `$ y* k. i  l$ }
                }% _* q8 r( K& v) R  J( t2 z
        }
1 I3 G0 d9 s0 T* l, a' C
) a* y$ ?: j( ^5 t. ?
        fclose(fp_map);
! s5 M! ^& `1 L6 L, C7 c
4 D% C+ y% c' l0 o( b+ v( [- Z" }
3 P# ]( a( h8 g. M0 J, v, A+ b
        return 1;
0 T1 a6 K  z) c) ~# ~  p
}
0 A% G5 E6 ]& j- A
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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