游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
4 K  ^) L5 V; z! Q
! M- }& R4 r& A8 z5 i( {% F
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
7 a* G7 y( ]8 S! |
3 @' O2 Q/ l1 j2 l, ]/ X, j* t% h/ ]
    第 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 u1 \, R; z9 F2 u: l% S  }1 l
& l8 j/ U9 |$ b8 ~* V* ]3 E8 Q) ~
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
) c' I' T( }; Q% V& _
07      在地表二层 12 01 这个大序列下的子序列编号
4 s2 G& @* a' {' m$ a7 {; N% |
86      物件层的大序列
# J# y3 B7 v9 {1 Z4 J! _+ i
00      物件层的大序列下物件的子序列编号6 B" c- K$ G. o$ H0 G( ]6 d% a8 L
03 03 00  目前不详
8 C! b  A+ Z  q- C8 Q! v1 ~, B
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。, x. `2 Y+ k% L, d6 w
) P1 h3 H* N7 \2 c4 _* K# K
//************************************************************, N: `0 ], D; q/ u2 G- k
// 加载地图基本数据函数;
+ k) p/ n1 n6 a
//************************************************************
$ e( D( Q) I3 E2 Y7 {1 {
# g. S9 \& g2 N; Z7 G
//************************************************************" E: @" F! {6 {
// 加载地图基本数据函数;
/ i/ `( o% d" K! I4 c' G6 v
//************************************************************6 I# O3 T/ ^% c0 U
5 y9 T' B- C* |( J! r
int Cmap:oaddata(char *filnam), z. B6 B3 c. y7 E% y
{9 G( e& I: f) ?9 ^- R6 a% R) ?
        int Temdata;0 x6 N( s4 R5 D9 ~
% V  i& v1 @8 \8 J
        if(filnam == "") return 0;
5 Y' a4 U8 q/ Y
& d5 E' J! R3 l
        fp_map = fopen(filnam,"rb");
: J- R" t& {& @: N' V6 M; ~# F

4 F3 X* L& g  R* p; [
        if(fp_map == NULL)        return 0;( q" L) p8 ~. J3 ?

- f# G! i0 m, U- M8 @* a
        fseek ( fp_map, 16, SEEK_SET);# c  L9 K. ]" ?1 Q; x4 `" x
        fread ( &ShortWidth, 4, 1, fp_map);
6 e5 y* Q( i$ F7 H8 v
        fread ( &Width, 4, 1, fp_map);
1 d7 {/ t# V# s* y% K# a
        fread ( &Height, 4, 1, fp_map);
! A( M. t/ v& N+ ?6 Y! d) d

! e6 o5 x0 l2 q0 e1 _; r4 h
        int TW = Width / ShortWidth;9 e1 ~5 ~6 V( s6 u
        int TH = Height / ShortWidth;
5 D6 o$ q/ N. m# ?& l7 u
( x1 `. p0 X0 c1 b3 |$ p9 B7 t9 e
        for (int j = 0 ; j < Width ; j++)
: d' G( b( v# }6 J& @
        {
/ C5 e" V  w  ?( C/ t9 {9 ^7 h
                _DELETE_ARRAY(Cell);
1 J6 y# c! [) e5 B/ B; G
                _DELETE_ARRAY(Role);/ I9 e; H; f1 N  f
        }% W  D  S' a! _- b) M3 H; b0 j
1 `$ A& [; N! P" x4 z- U
        Cell = new stCell*[Width];
% q5 O* ~. C5 L8 Y/ H, G7 u
        Role = new stRole*[Height];4 b" r# |& t$ |7 e% H
        for (j = 0 ; j < Width ; j++)4 ]9 p- U( ]$ _" T7 i) A# X
        {
; N8 Z) ~* H& o# I* \7 e
            Cell[j] = new stCell[Height];+ L! i* M4 i6 s  B* r1 d# [; J1 Z
                Role[j] = new stRole[Height];        
7 i5 e# y. z5 i+ i9 O
        }        
7 [, r  X6 v, ^5 x6 n# I& E+ W6 u2 e
, O% w  E  G; \) K# u9 Z6 n  F
        fseek ( fp_map, 28, SEEK_SET);
( A7 U/ n' ~2 `( }
  I& r8 c8 m# u& S8 e" B
        for (int y1 = 0; y1 < TH ; y1++)( c) O3 x: ], @" B! g. ^+ ^
        {( M5 W8 }, n0 P0 ^! O+ K4 g- ]
                for (int x1 = 0; x1 < TW ; x1++)6 [% {% b! E) T
                {
3 x, F# s. q; E
                        fseek ( fp_map, 20, SEEK_CUR);
9 z  R" \4 K/ o
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
( A; u' g( J& a8 a: s
                        {5 }* v+ |1 F2 j9 B/ W! n: A
                                for (int x2 = 0; x2 < ShortWidth ; x2++)0 J: C9 @. e0 N) W1 B+ J" a
                                {% A! o' [) g- R- k/ h4 ~/ H# k
                                        fread ( &Temdata , 2, 1, fp_map);
$ Z" i5 `7 g2 v
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
' U5 z6 h4 `# u3 o1 [

! n5 P; w# K! f: b2 @7 ?7 M  b/ L
                                        fread ( &Temdata , 1, 1, fp_map);0 F; A) I8 w% ?6 [: y  J- c8 `
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
9 k; E  A# j1 s
3 K9 H* K2 A% V* e2 s5 N7 k
                                        fread ( &Temdata , 2, 1, fp_map);! J9 N3 s$ `6 w7 A" j
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;; b" u3 v6 K7 _5 ?9 U/ ]

* s" M6 k/ ]4 F. m4 H. Q7 m
                                        fread ( &Temdata , 1, 1, fp_map);. i( E4 L) O# N8 ?# R
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;* S2 s9 F5 q: m# Q3 K! W
                                        // 6个字节3 k" V+ j: W; k1 Y2 m

* ~- L6 W% i: g1 i2 e
                                        fread ( &Temdata , 1, 1, fp_map);
$ r* ~( J0 E1 X4 f
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;/ L/ u0 }; h+ }* q7 A( S* p
                                       
6 O' g1 a" o0 A- ]/ X
                                        fread ( &Temdata , 1, 1, fp_map);
7 q/ D& w$ N. Z* a1 \% i
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;& b) H# B: a4 _6 l

- R4 \8 l, S  t3 I! Z3 Y# l% ?
                                        //fseek ( fp_map,3,SEEK_CUR);
1 B6 t2 D" d: b5 o' A
                                        fread ( &Temdata , 1, 1, fp_map);
) Q2 W, y' ?$ Z3 R
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
7 N7 F* E6 D! [( Z0 W2 {
                                       
9 q6 ]! W. H; j+ q8 P; e  x. W, `
                                        fread ( &Temdata , 2, 1, fp_map);$ q' U* h) A' U6 w
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;1 d2 m2 o& i5 u

2 H  W# Q! A4 u- r$ c
                                        // 1个字节
# a  d' i' J7 A+ `8 L& W" {5 k( j
                                        fread ( &Temdata , 1, 1, fp_map);& h( J6 S; b- J" x' r
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;2 W4 I! |6 @: L! f' I
                                        //if (ftell(fp_map) > FilZize) return 0;5 _( I& _8 Z  T8 c; E. l
                                }9 n5 T4 b, W1 o5 Z
                        }1 l* Z8 e, j' m# O& w% v6 x5 H
                }
& T$ u9 H7 @6 |; G" k2 s
        }
! t* I* Q3 ^6 `. ]6 q' ]
6 L  F" k' m% n2 {" H
        fclose(fp_map);" l' q3 H; j( q( |( I  W: q6 {- M

1 T$ B9 z4 Z7 L: J- U1 D
. A9 R6 {, h3 ~2 X5 P  V& J
        return 1;
- I' `8 _; |. q3 l" N1 q
}
, ]. D( Z9 H0 s
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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