游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。; L) |4 ~) q1 y! I

% G5 I& r; B( ]+ ?+ _: H2 p$ h
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
9 N/ ]6 ~" w1 Z, }' ~

7 G) C; ^% |6 u7 j! E4 f9 _% b8 J. y
    第 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 地表一层的序号7 a, A  a& ]8 E% F: V

5 D3 w9 F6 H! X3 P4 _5 X
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
% x" p6 _, V$ x
07      在地表二层 12 01 这个大序列下的子序列编号
* @* P0 i' c3 |" C- _5 T9 t6 H, Y" \
86      物件层的大序列/ C7 H# }# H" b! S* r
00      物件层的大序列下物件的子序列编号
4 r; C5 t6 ]  g7 _( p- k/ G- r+ Q
03 03 00  目前不详
3 A3 Y# d9 g% H8 X& h7 ~0 L
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。8 g6 l  j: [3 d  z4 V8 @

, a. l) k  B; J2 y$ g6 K
//************************************************************
+ A4 c) z5 Z1 t" X6 H4 n
// 加载地图基本数据函数;
5 |" U. k7 X3 ~( \% W+ J2 R+ }
//************************************************************" Z2 K* [6 x6 n7 W

# X: V# V; V9 R' W
//************************************************************! S5 R( i% n, S! i
// 加载地图基本数据函数;
3 U& m5 B& k9 n8 Z% L
//************************************************************/ H% B; Q& a! k) C9 U9 I/ T2 d4 T7 x4 n

( N2 T1 Y5 P) B# `
int Cmap:oaddata(char *filnam)
' L  v! Y7 }7 T/ a
{$ N. t5 Z6 X, l3 M* W# i# A
        int Temdata;1 d/ _! s* I7 V( L6 d

7 h" d; v0 f# q+ ~$ Y# P' v
        if(filnam == "") return 0;
2 a. C6 k" _$ K! L0 _0 i0 k

$ ~0 Y8 x0 L( a9 |+ }- p9 M
        fp_map = fopen(filnam,"rb");
  W1 K% X3 f+ p- z; T* R* M

8 w0 @( a* w5 T8 o+ s' F( S
        if(fp_map == NULL)        return 0;, U- F0 ^1 o- m8 u. ]/ z0 ^
( Z& D+ ?3 V6 |! A3 d* C4 _7 F& ]
        fseek ( fp_map, 16, SEEK_SET);6 a9 M( Q" t( W+ E5 v
        fread ( &ShortWidth, 4, 1, fp_map);
, y! m+ h+ S5 C) P$ H) x7 U& N0 K
        fread ( &Width, 4, 1, fp_map);
  W8 l5 i3 `$ `% }
        fread ( &Height, 4, 1, fp_map);& x9 t/ ^; K6 q$ n$ x  t
3 C1 q/ h+ o" K/ o/ e# [( `& d& b( F" H
        int TW = Width / ShortWidth;! }+ O+ N4 n" o
        int TH = Height / ShortWidth;
" {0 C/ K& O% W) j2 p9 @: B/ e) C
$ ]) [) D& \) d
        for (int j = 0 ; j < Width ; j++)
, z/ i- B  Y* _
        {
0 e! c& z, A  i2 L
                _DELETE_ARRAY(Cell);
9 o5 U1 r5 b3 g; y
                _DELETE_ARRAY(Role);2 n6 a2 S- v. _) L
        }3 C& @, F$ |' }9 B* u

1 M5 ]! w& B, m/ C
        Cell = new stCell*[Width];
% Z6 w/ {. R  |" O( T3 R0 y
        Role = new stRole*[Height];
5 }1 N5 ^9 F4 _" w$ i
        for (j = 0 ; j < Width ; j++)5 J" L' J/ I4 {
        {
+ T+ K" V( B7 c( [0 w. k
            Cell[j] = new stCell[Height];
8 u; D1 E  u/ W' ^4 T5 u# P4 E
                Role[j] = new stRole[Height];        9 W) f* B& k7 s3 `0 r0 K
        }        8 S4 S. F! i6 A  t9 V# ?: w8 J

  z) s! ~2 h7 Q! p
        fseek ( fp_map, 28, SEEK_SET);* Z% y) o" n7 R; }' `+ L( ~
7 J5 P- J! X3 r
        for (int y1 = 0; y1 < TH ; y1++)( m- T2 i: G9 V9 ]  _5 [& G4 f
        {; {, j' J! U5 ]
                for (int x1 = 0; x1 < TW ; x1++)
6 Q. c& K* G2 b, b0 V5 w8 F$ [
                {! m) c& @% X0 A  B: ?; k; ?- W
                        fseek ( fp_map, 20, SEEK_CUR);
7 P0 I! r6 V; Z* q
                        for (int y2 = 0; y2 < ShortWidth ; y2++). v* O4 u: C. L/ [+ H; S! M6 f
                        {* T7 l$ b$ G3 |
                                for (int x2 = 0; x2 < ShortWidth ; x2++)0 ~/ q, \3 v, G  {7 Q" U
                                {
7 M5 B# X+ i! c1 T! D
                                        fread ( &Temdata , 2, 1, fp_map);
4 c: l5 v8 ?# v& B# K# }1 ^$ [
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;/ B, ]7 [7 D6 G! u' R8 d# g2 t2 p' V
; h9 I2 z; T" r* [) e" F2 O2 [
                                        fread ( &Temdata , 1, 1, fp_map);# j0 l! e+ @5 z' x0 ]4 J
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
3 m' I3 N8 b2 k; N# o: u
! c7 ?8 P8 B0 w
                                        fread ( &Temdata , 2, 1, fp_map);' |" B0 J! T; u) j, ~
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
7 k8 _/ W2 R$ D" R8 ?4 R; O
0 J4 {# t( l: v; _
                                        fread ( &Temdata , 1, 1, fp_map);  i* j+ Y4 g8 @# u' l- h, o
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
( B0 R; ^& V3 S: i
                                        // 6个字节
8 t+ P6 r; w) d. D, z

; e' @+ N0 ~9 x  _/ {; r$ N1 N+ S( _
                                        fread ( &Temdata , 1, 1, fp_map);
0 v6 j# F. Z% g2 Z4 ?
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;" [: Z3 p5 |% \2 o! F" l1 z
                                        # l9 w6 q( m+ s+ E$ n
                                        fread ( &Temdata , 1, 1, fp_map);; K! T3 ^" W, Z0 j
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
8 _0 O2 l3 q1 L6 j# |
0 K; b& s# y; z" }
                                        //fseek ( fp_map,3,SEEK_CUR);
2 e( x" u- O8 X# R0 D, o
                                        fread ( &Temdata , 1, 1, fp_map);
1 F( o. X. T& Y, e0 I' ~
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;5 b; Y' R3 g- s$ n  {
                                       
5 O8 c! o& U* T* A' |
                                        fread ( &Temdata , 2, 1, fp_map);
. \- D6 j3 A" C' }8 R# V$ K
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;" r, L% K7 c9 Q8 L1 @
/ \% E* v1 ~4 x; v6 _
                                        // 1个字节2 n% X8 C+ B) P" _& d% j! b. |
                                        fread ( &Temdata , 1, 1, fp_map);5 S( c8 O8 p; @4 A$ S
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
2 T; m- R5 j, S3 I' C  p9 c) R
                                        //if (ftell(fp_map) > FilZize) return 0;
/ e; B  r. l/ X) X4 F8 A
                                }
1 \6 n. \; Q1 V  ^
                        }
  c1 f' P$ i% R0 @- u
                }
# D3 F+ Q. L7 W/ m2 Y% s* _
        }8 O; l  D4 Y8 l; i" v- I( D
# n5 Q! J# w) X7 a( O7 I
        fclose(fp_map);. _( C) M+ w1 c% ]; n
4 Z! Y. C* x2 q/ ?6 x

3 {) g! e2 {5 j) ?
        return 1;0 d! A# R$ \1 x8 X  X- A/ C
}

' n2 U& @/ ~- N( c: @
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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