游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
6 A8 ^6 {0 w2 ?) n  h5 F9 j3 {

( S8 v4 Z+ P, s! J5 `0 m
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。: T5 ^3 C3 k& o% h& F( M7 h, I

# M( @" `& \0 m7 E: o! m2 ^. A% ^
    第 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 地表一层的序号
! n- M$ C4 c5 _/ j& F7 A. e
2 V) L1 [: \% ]. u
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
& }) F) V. V7 l
07      在地表二层 12 01 这个大序列下的子序列编号
+ w  Y/ [+ k5 J) w$ r$ d6 Y, s
86      物件层的大序列
5 V8 o, O; T4 i& N' U# w1 {9 V/ j
00      物件层的大序列下物件的子序列编号! a. C1 Z0 Z, ?
03 03 00  目前不详1 n% T- F# n# e4 s& ?' X
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
! C2 H! e' P, m5 e- X$ `- y  V
/ }; @; _; s$ @+ B1 j
//************************************************************
! x! m5 Y7 V# t# @% I
// 加载地图基本数据函数;! E+ P  S, @6 v
//************************************************************
* P, q$ E9 ?6 s& z

" v; y$ W4 v( v1 I! w  L# t" y# M
//************************************************************6 t/ t8 X; ^1 q0 D1 y
// 加载地图基本数据函数;/ H  V: Y4 P/ X* d& F' }8 N+ g
//************************************************************. G+ e! |$ |+ I" g! o
& e% A( [  k0 f; B: \
int Cmap:oaddata(char *filnam)
) ?. a& c. N2 d: A; ^' b7 k; u
{
" Y  W$ D* R  \; s0 F3 c1 l: \
        int Temdata;
; ~6 F4 {" ~3 ]% c
0 z# h! x& c5 R
        if(filnam == "") return 0;
4 @/ l+ o& {* F; V

, n) p7 ~/ \0 S9 Y9 d4 r" m
        fp_map = fopen(filnam,"rb");3 c1 x# R1 e' e; m

4 }% t/ s) _8 z1 g% Z
        if(fp_map == NULL)        return 0;' ^5 h% o: O# t! b) S$ A

2 c" h) F1 q+ n( }' x1 n9 y3 v- F' X1 E
        fseek ( fp_map, 16, SEEK_SET);
: F7 O0 B' o7 ^/ T4 U9 V
        fread ( &ShortWidth, 4, 1, fp_map);
7 C  U9 W, G# g+ J( [
        fread ( &Width, 4, 1, fp_map);4 U2 b* ~0 x. y( M) L  S
        fread ( &Height, 4, 1, fp_map);8 @( {( j) J2 f0 V" O
2 M1 C+ e! l- h( b" y7 E: z1 B
        int TW = Width / ShortWidth;
( k9 t7 |7 W  O
        int TH = Height / ShortWidth;
" j7 @* s( J* n" C/ F* L! F' ^

( y( N/ R2 ~7 H" I$ b# |
        for (int j = 0 ; j < Width ; j++)# I) T9 r$ ?+ ~8 U2 [4 I; ?
        {5 f; X4 E, j& k5 d
                _DELETE_ARRAY(Cell);
  v+ k& N, N1 v. ?( J
                _DELETE_ARRAY(Role);/ F- @% A5 m* W; d  X1 D
        }2 x1 _. T! {+ ?) u. v* t1 I$ ~: j( |3 e8 U

+ j0 v9 V$ O4 b0 g* S  G
        Cell = new stCell*[Width];9 z1 r+ B2 l- S+ ~
        Role = new stRole*[Height];
1 k' j. N/ @0 W% p8 [
        for (j = 0 ; j < Width ; j++)( m) J9 D  K: s6 \4 j" _- P: L6 y
        {
' u0 g2 s7 T$ S4 z8 L% @( s8 Q3 j! ~3 W
            Cell[j] = new stCell[Height];$ z7 C. |6 \9 _# B1 t2 m
                Role[j] = new stRole[Height];        
+ d: y! H1 G9 \9 D: W. @8 e; U7 k
        }        8 f2 h5 @1 G2 Y# |$ t

& T* v; k! t0 s6 A
        fseek ( fp_map, 28, SEEK_SET);8 H. Y8 ~9 M, J5 o: k
4 v' n% ^9 Y4 W0 L' H
        for (int y1 = 0; y1 < TH ; y1++)
0 r+ t" d- ]+ a2 B3 a: g8 T
        {1 z7 U$ X6 |# ]% @
                for (int x1 = 0; x1 < TW ; x1++)
) g5 `5 L8 k7 `( v: Q
                {
* _- l- V) I5 `, t' ~
                        fseek ( fp_map, 20, SEEK_CUR);' D* W" m: r; t# W2 a; m. ^8 G
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
- R1 S+ c. C! n% A1 F/ |" S
                        {
) L( D$ i7 E$ f4 a' @) Z
                                for (int x2 = 0; x2 < ShortWidth ; x2++)
/ I+ k0 A0 j$ ?. q9 S8 [
                                {
8 E6 n; l+ B7 Z% g4 o8 K+ v
                                        fread ( &Temdata , 2, 1, fp_map);
( |: ]  p' X8 u* ?! m7 c
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
0 E. F0 ?- n2 ]+ `# O

- z/ O4 w) a& z/ n& t
                                        fread ( &Temdata , 1, 1, fp_map);8 |' p; }& T' a) Q  m
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;. C8 i) E9 |& X9 \
0 U5 B: {7 ]) t  `1 A
                                        fread ( &Temdata , 2, 1, fp_map);
' p- k$ h  E5 ]( L" R% Q+ o' c
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;- p* Q0 e5 o: s9 `+ u8 B
0 [$ }% o  U8 R9 X
                                        fread ( &Temdata , 1, 1, fp_map);
. Y. }9 c- w! G3 p3 R3 k, h
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
8 ?  N. u2 }1 W
                                        // 6个字节4 k2 j6 e5 W* t6 l% Q

: v# s) J' e( [7 N  e/ M
                                        fread ( &Temdata , 1, 1, fp_map);# P1 x- l! t( r4 d" \4 A
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
: W& _- o) e9 u
                                       
% s* `+ J) @$ `" N2 _( h9 D5 c
                                        fread ( &Temdata , 1, 1, fp_map);
# E- X( f. [# u! ^: l% B5 n: ~6 o- \
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;+ B3 E1 v0 C5 X3 A4 W

; M  J) o8 V& H4 E& g# X
                                        //fseek ( fp_map,3,SEEK_CUR);
$ E0 U6 Y0 ]+ A* P/ @* \$ E
                                        fread ( &Temdata , 1, 1, fp_map);
% B  E- l5 t, ^0 s$ H
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;% o4 J3 O) a6 {; D
                                       
3 N8 S* c% N! F2 I
                                        fread ( &Temdata , 2, 1, fp_map);$ K( u% W3 F9 J5 N* X$ f6 z' ?; i7 f
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;: ~5 m$ a$ P6 `% O0 K% U

. `+ L( r2 p/ \
                                        // 1个字节. a* x2 i. T% T% o! B4 N0 m9 X
                                        fread ( &Temdata , 1, 1, fp_map);- I2 y0 A2 q, d, k: Q" S9 P" K
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
, `4 [! ~5 Z  c5 _3 z  `' Y+ n
                                        //if (ftell(fp_map) > FilZize) return 0;
# R4 T4 x) F9 k0 }7 \' J/ N! S
                                }8 s* B  f# I1 C+ l) j1 |
                        }' N' \4 m; w; |* ]5 K# u
                }
# u+ p8 {9 K* J' B3 D0 G5 o) n
        }
6 ^' t$ ^+ H9 B# o, `2 G9 s7 v9 D

" k: ?1 k& O; {; E2 s& L# H
        fclose(fp_map);
: C, N% |, S, v" P- ]6 F

4 M. ]) K0 Z9 u6 r+ Y- I: t5 d1 l. {

# ^* ~  P( o3 Z# ?
        return 1;
3 b. A; m$ U3 b* }- d& E
}
1 r5 C, V7 d% u3 J* T9 Y
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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