游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。% K: a! L: B& Z9 }

4 E6 j# p3 v! ?- g; Q6 ]( B5 `5 {
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
3 [$ {1 F& e* b5 t0 |. ?# c

! t& U6 s( [' r; w
    第 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 地表一层的序号8 ~3 o. [* T% B% h# q; X$ Y! P" f
; @# c, d9 @5 a$ U
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号3 N, X# q! g; s( m4 ]: e6 o
07      在地表二层 12 01 这个大序列下的子序列编号
" t6 }( u  j% n& I# ^; K. {: i6 w. `
86      物件层的大序列7 J8 {. Q8 A& f  `( G( p& ?
00      物件层的大序列下物件的子序列编号. I$ b$ u- o# l5 P* E- p  l
03 03 00  目前不详
9 J& s. ?6 R4 s; R% M/ s# w( P
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
5 q9 r+ F* X9 U7 e
0 I! q/ `2 V, }4 V; _7 q% t/ v. C6 i
//************************************************************
  L0 ]6 d4 o/ X8 X! R
// 加载地图基本数据函数;; Y% u4 [/ V# Y8 b, p
//************************************************************
, E' F/ S5 g  C$ Y: G7 M

# o3 `  [2 c' V6 p
//************************************************************! U, n, v- k* y  D% ?
// 加载地图基本数据函数;7 |& j' e: b& M$ o% R: v; g5 e
//************************************************************
7 w8 a- J, o" u+ o
- T3 Y; R5 N( x/ s# \9 n# t+ M
int Cmap:oaddata(char *filnam)! p3 Q2 I1 u6 E+ d
{
. ?! |$ m3 ^5 h& J5 \6 f
        int Temdata;! }* h  n/ c9 ~+ }) y6 i4 Z- r
2 s6 }, S! o2 o! A* \! X/ P0 A
        if(filnam == "") return 0;
& P1 y+ {/ V) F* L
8 F0 z+ m# C6 y6 G
        fp_map = fopen(filnam,"rb");4 [7 a$ C0 k1 t, d" p( C9 M: K
: p5 N; }  ^( n3 D* W
        if(fp_map == NULL)        return 0;
6 h  y/ [6 ]9 c6 s

' J/ Y; [. Y2 W6 S; R$ H
        fseek ( fp_map, 16, SEEK_SET);0 s+ Q, h' G; F# P; E& \
        fread ( &ShortWidth, 4, 1, fp_map);7 H+ h8 g2 T1 S
        fread ( &Width, 4, 1, fp_map);
2 q/ z6 @8 B) S
        fread ( &Height, 4, 1, fp_map);
# L0 D+ h! q7 I- I2 a5 S$ v* E/ F9 g4 L
1 D5 I% @% q- g4 |
        int TW = Width / ShortWidth;' I" H7 Z. F: M, j3 T' R/ x. [2 ~
        int TH = Height / ShortWidth;
8 f% Y( a% Q  G- o8 [
) {! P/ u  b! N- A, L# k" _
        for (int j = 0 ; j < Width ; j++)+ A7 \* b7 e; M. K8 G. F$ {# h# n
        {
$ C* ~5 V' e- H3 P: r& G" X' k+ n
                _DELETE_ARRAY(Cell);! t5 Y# ?& T4 y, |/ d
                _DELETE_ARRAY(Role);
+ E8 w( n5 n0 ^3 K2 v
        }
1 s2 ?& {; ~8 k: z# m8 @
. b' a+ t) ^9 O/ u. R% T$ m9 V
        Cell = new stCell*[Width];
! `% h% O% `7 z3 k0 z
        Role = new stRole*[Height];( f" z: B0 `! }. B% d
        for (j = 0 ; j < Width ; j++)
, ~$ U6 T. y/ E" m: m
        {
2 {9 n2 k0 i* y/ F6 x2 w
            Cell[j] = new stCell[Height];) }6 o- f! p' L' t, z0 l* F6 R2 V
                Role[j] = new stRole[Height];        1 |# D" o4 i3 k2 K* s: b( F7 z
        }        ; h& F8 d" a1 H1 q2 @* ?

2 T3 h; P" i4 C' k* K
        fseek ( fp_map, 28, SEEK_SET);0 y: g, T2 q9 U& e9 H) Z

( E9 ~0 G: ?$ b, A6 `, L# v
        for (int y1 = 0; y1 < TH ; y1++)
7 o3 T! W* [3 z: w/ |7 w
        {2 l3 e/ y$ b; [- @9 B. k0 G& `, X
                for (int x1 = 0; x1 < TW ; x1++)
1 B  j( _2 d7 e- D
                {5 A; Z1 X# i# |  }
                        fseek ( fp_map, 20, SEEK_CUR);* E) K4 g4 J4 E( F! a, p" F5 B# q: {
                        for (int y2 = 0; y2 < ShortWidth ; y2++)" d9 F  g3 x+ G: F# ?, u- T
                        {
) v9 O4 E5 g8 I' T( g; p! F; n! `
                                for (int x2 = 0; x2 < ShortWidth ; x2++)
" a) |# o8 P  `9 O; E
                                {
* h0 n( E: P$ v5 Q1 }6 S
                                        fread ( &Temdata , 2, 1, fp_map);
; E  K6 k* ~( O& Y( \5 t2 R
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;; r. {8 h) f6 u' g& D- [- V' G

2 N7 o  v$ D2 v9 l8 S, m. }
                                        fread ( &Temdata , 1, 1, fp_map);
4 ~8 z( `- C5 h
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
  o: D4 h) k% j5 ?8 T

! m0 q" Q5 S8 `: `9 Q- z
                                        fread ( &Temdata , 2, 1, fp_map);
  h( E# V0 S7 D
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;) i' k4 r% ?( f

* Q2 s' j: a& v- H7 w8 w: N1 t
                                        fread ( &Temdata , 1, 1, fp_map);
; x+ N) U8 }- p' d2 |2 d
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
* `) V: I2 n, R) e- [2 Q/ P
                                        // 6个字节
$ n% u9 k1 B! U. s! W0 P# n% w
; ~3 f% h% {) V% A% ~
                                        fread ( &Temdata , 1, 1, fp_map);* E- n- b0 Q' P4 Q$ s, N
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
) O6 O8 a2 B* w+ ~' q
                                        & v3 W' W" b9 `# R
                                        fread ( &Temdata , 1, 1, fp_map);
; j" h- Y8 F7 T
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;" Q: L7 O4 U4 T. v" v
, j- M* u3 ~, S
                                        //fseek ( fp_map,3,SEEK_CUR);6 n2 t6 q7 ]- u1 ~8 z0 m
                                        fread ( &Temdata , 1, 1, fp_map);8 V* ?6 Q0 R8 W% f9 g' j7 h8 p
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;: ]) y2 a0 O( H$ \
                                       
# l, ^& h% B; ~, s  ]
                                        fread ( &Temdata , 2, 1, fp_map);# ^/ n3 Q. s" v* a
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;) W4 [  @6 R8 p+ g' V
: j( d5 L% d9 y) }  l. k% O
                                        // 1个字节$ J) u$ K$ E+ @
                                        fread ( &Temdata , 1, 1, fp_map);
6 j7 M1 E& d, o
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
+ U( ]& u5 W3 J$ j
                                        //if (ftell(fp_map) > FilZize) return 0;4 @0 f( r+ I% c2 m4 H9 f2 H
                                }  k2 x# J  a" M) k9 R3 _
                        }/ R# @7 K/ \  J. B
                }
; `8 [9 z2 O! z1 ~2 p0 Y
        }- ~4 k* h. P# I& L; }3 `' t

- X% w% g$ w1 F1 o( y! g/ ^2 M
        fclose(fp_map);
: k, X* X) L  A: I: E; E$ |+ w

$ N6 X( g7 [; n% i) k1 n' F5 C$ C
8 A2 q, j1 T, |$ B
        return 1;
! ^+ X# [3 r" x( F/ v* M
}
$ S0 Q$ |. G5 `; u+ V
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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