游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
7 e$ ~1 O! ?: L8 {
4 ^$ x1 O" d( r5 E. F! m$ N  e
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
) j! ?" a% k) L$ d) s2 b% H
/ N9 X# _1 B5 p3 K
    第 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 P* g! q1 M1 ^  s, a- N) z- E
; R1 T! w! o$ s" Z' r
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
" |( T4 F4 ~/ V5 A* C: c7 e
07      在地表二层 12 01 这个大序列下的子序列编号5 L" E* D+ n- A6 J: q  z
86      物件层的大序列/ M* I( W2 ~$ H* m3 s
00      物件层的大序列下物件的子序列编号
( \7 K- z" ~) F3 |. n
03 03 00  目前不详" c7 E# a: |( Z
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
* W' t5 Q+ g% g; K* a7 M3 u0 F
0 w4 `3 f& k: _, k- H/ i
//************************************************************
0 d/ L8 C1 c  U
// 加载地图基本数据函数;
- g' M: B& S' [3 i# Y) R4 z
//************************************************************
3 V5 R* c7 `- {

8 X/ [1 ?- \- }+ f
//************************************************************
( \  T% }! M6 e- T- J. Z: `0 }8 ?
// 加载地图基本数据函数;% E& K: h: j; O
//************************************************************
! m0 o* j7 ^2 c4 Y
5 |0 j3 [5 J: n3 F
int Cmap:oaddata(char *filnam)
' m% y; h6 C' C$ L! H
{
7 Y! J' ^4 t9 x+ Y! w: y
        int Temdata;0 k* f+ C2 H9 r8 [3 x) P+ s' q

/ X6 G$ x1 ^  g! l% W
        if(filnam == "") return 0;9 \! z- b" j& v

1 X8 t9 B3 b. m  p3 |: ?' [/ t' z
        fp_map = fopen(filnam,"rb");+ ?& q, S4 u, L" c9 D

* D5 q* ]! v. X6 E! I& i% Z8 H2 z
        if(fp_map == NULL)        return 0;* g  s3 s5 u; H! ?
9 _8 U$ A& ~. m  ?1 P
        fseek ( fp_map, 16, SEEK_SET);
7 p1 p% J, r+ E
        fread ( &ShortWidth, 4, 1, fp_map);
7 o, q- M& a1 \( w9 k
        fread ( &Width, 4, 1, fp_map);
7 Z9 ?/ `1 f, W2 W( A! @# c
        fread ( &Height, 4, 1, fp_map);
2 R, H  ?0 k9 z# }$ u3 E; s; H$ C9 K
- b% a& `! P# t7 q5 `
        int TW = Width / ShortWidth;
: @8 h9 e2 f# b3 K5 A7 m0 s
        int TH = Height / ShortWidth;+ }2 V! R2 Z9 e

; l- A: S& F* Y9 P
        for (int j = 0 ; j < Width ; j++)- i4 s7 h8 u& |7 F
        {
) E% r* N% C( }. a9 [% {, u
                _DELETE_ARRAY(Cell);
" X" L) x* Y; O2 N' K" u' K3 i" x
                _DELETE_ARRAY(Role);4 T7 Y. i9 t$ N5 \4 g
        }$ @3 Q- A6 z0 A' J9 }9 C, ]

" R4 r9 N: O7 Q. V
        Cell = new stCell*[Width];
: a/ H& B8 K3 f3 _% |5 F7 s
        Role = new stRole*[Height];
& c- x. O/ W5 z
        for (j = 0 ; j < Width ; j++)' M9 j, @0 x- t% @1 I4 d" Q! v. l
        {: ?* x3 B# R  _- V. C7 \6 y$ R$ w
            Cell[j] = new stCell[Height];
- O/ S4 E% |- C" z; c6 i
                Role[j] = new stRole[Height];        ' \4 W+ n, Q8 G% |
        }        * B% C  q: P# C
3 M  q# s9 p& _1 h- N
        fseek ( fp_map, 28, SEEK_SET);- f7 N5 {8 t8 s* e
" f  [2 s8 h0 |0 P* `
        for (int y1 = 0; y1 < TH ; y1++)6 c/ {- C5 S: K" @8 p, p) T7 w/ }
        {
& i1 ^9 Q# J  V' D: l* a
                for (int x1 = 0; x1 < TW ; x1++)
' `/ k6 _: _0 H
                {$ W6 p3 [2 F4 M
                        fseek ( fp_map, 20, SEEK_CUR);
6 D* `! {7 b7 `: ~$ G! {4 u
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
; d5 J# Q4 B* F. A7 ]2 E
                        {
) q# W7 N3 B" P3 ]
                                for (int x2 = 0; x2 < ShortWidth ; x2++)+ u5 J1 ~5 f2 N1 _1 M2 N
                                {- h, N/ H/ x$ g% g1 ~: x0 `
                                        fread ( &Temdata , 2, 1, fp_map);
9 [. y; J% ?+ a7 d4 g( w# ]
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
" O7 B  q- r% g: Y3 e

) W& J6 ]# y) w' @: O
                                        fread ( &Temdata , 1, 1, fp_map);
4 G9 ^: z& s  G7 ^" X5 _
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;7 Z: G9 K. S1 i, E+ p5 c7 ?
: I3 i' n8 C+ O0 Y; H. B/ Y
                                        fread ( &Temdata , 2, 1, fp_map);3 C! _( G! h6 G+ r+ I
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
9 a. z: W2 M' S

' G9 W- E, n; }: l, l) [' A
                                        fread ( &Temdata , 1, 1, fp_map);
+ x2 J/ ~* e$ \7 h! b8 B
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;2 n3 ]" X, k' k% a( W1 d
                                        // 6个字节5 H9 R3 S: \( M1 W& T- }
% K: C+ {, U+ L3 t
                                        fread ( &Temdata , 1, 1, fp_map);
; i) o" O6 _+ E* a  N, W( G- g" r
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
' R! ?' g3 z+ U+ f- ?3 w" E8 O8 s
                                        0 n) S7 K, [( ]# r% v2 |
                                        fread ( &Temdata , 1, 1, fp_map);1 H) K# G4 p; U* ]  z( V2 f+ a
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
8 i! l! Z$ e/ }. {# E

2 P/ o  P+ F; a5 ~3 ~
                                        //fseek ( fp_map,3,SEEK_CUR);
, n3 w& u& |, M  A# }# |/ e* ]# ?
                                        fread ( &Temdata , 1, 1, fp_map);! I: S3 c0 J. ]& Y  _# l
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
4 Q( ]/ R/ ]' h! B; L" t
                                        * {# ^& w& M  {" `
                                        fread ( &Temdata , 2, 1, fp_map);' r+ G' E$ f/ N' a; e6 D
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
3 X7 j$ D. z" E+ F6 x+ }

' o* d" s& a  z9 G, A( S) V
                                        // 1个字节! {. K2 j; k+ c% \
                                        fread ( &Temdata , 1, 1, fp_map);
1 r; P/ p6 b5 F6 i
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
0 z5 d3 ~5 i& K/ O- O, U
                                        //if (ftell(fp_map) > FilZize) return 0;
4 ?1 X  K$ H( N- X, ^3 ]; T
                                }' X6 f/ F7 R7 H9 s  a4 A
                        }
" @3 N. i+ g' q6 w# n
                }
2 E% `& y' ^6 B  d. k1 L
        }
, g+ C3 }/ ]% w2 w( Q& N: r

; F7 k: ^4 }2 j7 b
        fclose(fp_map);7 i$ {5 g. i9 x& @7 a

: E" d- q5 s% @+ C

! U8 k- h6 I' i* S7 c5 l2 Y. |" G
        return 1;
3 \: d/ }, D- M" j- g
}
% H4 o6 _( w) n! y7 h* m
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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