游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。& B2 E0 n% z7 H+ z( A

, Q. L' r. W" @: |( _" k
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
# O2 Q) k5 L3 z% `. u& w
, b( i4 [0 J7 o/ E) Q
    第 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 {0 o2 ~! F6 F9 U8 A
) J0 n. \7 M! n' V! W; J9 y# i* |
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
, U: t) p5 {9 @$ A, }
07      在地表二层 12 01 这个大序列下的子序列编号" U/ Y; i+ C7 d. M" F0 Z/ k( ~! M
86      物件层的大序列) k: D; O1 S: |3 U6 r
00      物件层的大序列下物件的子序列编号. C+ J, O/ d" V: {" g  Q
03 03 00  目前不详4 H( ?) ~. Y7 {7 S! s4 o
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
' l7 C4 U4 t8 n

8 a: V0 v  G, z/ x7 x7 G9 n
//************************************************************0 J6 z  _1 Q& l+ ~
// 加载地图基本数据函数;0 ?2 [9 Z7 S  |; h6 R. j
//************************************************************& F9 r+ h( g4 m

3 h8 f! `' b5 Z# C9 ?
//************************************************************! t- r+ ?0 ]8 N' A5 i0 ?1 }) C
// 加载地图基本数据函数;
5 s- ~/ I9 O$ U* x# h/ M/ S. w9 q
//************************************************************
. {* S! f0 }9 J/ I/ k) k
! S+ _& {- p+ |! u3 E* Y
int Cmap:oaddata(char *filnam)+ \) _" L  d5 z3 ~) `5 p) T
{
# p& i9 S. y# Z1 s# y/ v2 x4 R
        int Temdata;1 c& {/ O7 O+ u, k! \2 P5 d
  `: I- C8 B- {) ^
        if(filnam == "") return 0;0 I, H# l& k" c& h, f$ `, G0 W

, d" u4 {) {7 W2 J' v- U1 P
        fp_map = fopen(filnam,"rb");0 m5 g. O9 ?4 b/ l) ^  v, z7 i
" ~" m3 `( O  m" R: ?
        if(fp_map == NULL)        return 0;; I( l1 h: `* R* H, B+ ^% `
& N) l* ?" m4 G+ v$ n
        fseek ( fp_map, 16, SEEK_SET);0 ^6 v' f3 B) t0 c( K
        fread ( &ShortWidth, 4, 1, fp_map);
0 ?, Q( @+ u' D1 s3 h" T4 G. w  s
        fread ( &Width, 4, 1, fp_map);& R; q4 V- p9 V- }+ p
        fread ( &Height, 4, 1, fp_map);
. N: M1 W0 A/ a5 v
& G' d% G+ D0 ~; D1 ^5 s
        int TW = Width / ShortWidth;
$ ~( k& G( T0 D  Z0 v9 Q
        int TH = Height / ShortWidth;
  P2 {  Z  ~# q. y5 W: T8 c

, i# B+ |  v$ D6 @- S4 M$ _
        for (int j = 0 ; j < Width ; j++)
" a4 q1 I! U+ q. C" q8 M9 d: k8 A
        {
* C2 l" o& Z3 {  [5 @
                _DELETE_ARRAY(Cell);& p/ y1 G/ \6 h- C* M
                _DELETE_ARRAY(Role);: ^( e  Q) a* N# A' D  t3 o: x5 W
        }# b* t# M! Y8 C# `
; S5 m, {  U! Q/ A% a5 s" x
        Cell = new stCell*[Width];
1 @, D4 L% r- w$ P8 |" L
        Role = new stRole*[Height];" q9 q8 ^+ P, Z# m  e6 H6 A; R
        for (j = 0 ; j < Width ; j++)
" S3 \9 j+ l. l3 x) c* h
        {# O" d. X% R$ m, H
            Cell[j] = new stCell[Height];
6 W  F4 J6 y! Q. ?! w
                Role[j] = new stRole[Height];        
+ x1 i* P2 U' O* \2 L: c
        }        3 U) t6 m3 P/ h! I
: X) D7 l; A6 `' a
        fseek ( fp_map, 28, SEEK_SET);
/ v$ X, [. K/ w  b* _+ Y/ t
" {4 y( M' t% h9 e
        for (int y1 = 0; y1 < TH ; y1++)
& \9 w7 z, V2 l$ b
        {) F* `) ]6 _( R7 H, m7 W! ?4 r
                for (int x1 = 0; x1 < TW ; x1++)
- B8 D3 Q5 r' ~( s  R) C4 b3 v* Z
                {
7 _/ D3 e$ g) _& q
                        fseek ( fp_map, 20, SEEK_CUR);7 v1 _4 K% L  `
                        for (int y2 = 0; y2 < ShortWidth ; y2++)1 n3 Y6 m/ D$ h. V# |
                        {
2 D6 c& c, [- ~7 b1 _/ @+ D& |
                                for (int x2 = 0; x2 < ShortWidth ; x2++)" |( x& x: x7 t  K  g
                                {
) {8 D( g+ R* j$ t$ C' g- M
                                        fread ( &Temdata , 2, 1, fp_map);
. X9 P4 q5 [! S8 d) Z; p% i7 q5 J
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
: C' e4 y  {) f% F. O. b: p
, ^. T8 s7 k' C$ _1 U) U
                                        fread ( &Temdata , 1, 1, fp_map);
1 z6 s$ E" \. A1 l, R
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;7 o2 a  P$ j, }+ H& T

2 i4 ^5 N2 B) R/ K# R: v' i4 p
                                        fread ( &Temdata , 2, 1, fp_map);
4 {" f6 M( G" M+ b
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
& i! ?, N8 Y$ \' p1 x

% r$ ?' b  S+ o( Y
                                        fread ( &Temdata , 1, 1, fp_map);4 x+ P, f9 d! V0 N& t- N
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
. z+ n! b# L) a( I* ~& J! V
                                        // 6个字节7 M" Q( g- _! g1 o
6 d- h' R, J, r" \6 m  b
                                        fread ( &Temdata , 1, 1, fp_map);
) Z  H/ X# ^" o  a8 g3 ~% Y6 i
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;) B2 i" h! D* D1 m$ d
                                       
. U9 l- P4 F9 A0 L7 K) y
                                        fread ( &Temdata , 1, 1, fp_map);9 u, b( l6 w) N3 I
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;+ \9 |( o. z$ _
; ]7 N. [* _8 E  _0 }2 F  G. E
                                        //fseek ( fp_map,3,SEEK_CUR);
/ z. j/ Y0 X0 |8 L
                                        fread ( &Temdata , 1, 1, fp_map);' P9 x9 d6 _4 g1 j5 `- R6 D& S4 n
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
, x1 g) z/ E. u) t# \
                                       
, J& d4 w' G7 f0 P0 a4 n, a
                                        fread ( &Temdata , 2, 1, fp_map);
/ S' Q/ Q- E5 _- q9 ?0 U; \
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
( e9 n) d/ I/ A4 h; [$ H  Z
0 f% e  r0 x0 p4 y  ^8 W0 U
                                        // 1个字节
6 l% T8 J0 s7 J. m, E8 t6 c
                                        fread ( &Temdata , 1, 1, fp_map);  B* m* I( t% E4 ?2 W
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;! x( r) L/ _3 P* h
                                        //if (ftell(fp_map) > FilZize) return 0;8 O7 {7 g3 a& r5 U8 O
                                }
: m) G$ _) D, ^# d; l5 C
                        }
$ g9 u4 {8 `" p
                }# }" A" I- i8 ~6 Q
        }7 S' y% d2 v0 `  k1 r% p
9 h5 y4 H& M) P+ P  S$ D
        fclose(fp_map);$ E9 B$ g1 Y7 |& y
8 X: S5 }3 A! C

9 c- F* C: d' _* d4 H1 M$ }
        return 1;
! n" y4 F. Y+ z/ _( M9 X6 s6 e
}

: Q: |. n; `2 y. x0 o2 p
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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