游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
) o  k) d6 }' K5 l/ H
( O9 _- u, W6 m" ^9 T' T8 }
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
9 L# g  V; k) `7 Y' z% d0 o

. D; D) }- }+ Y+ l; X6 b: ^
    第 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 地表一层的序号0 [# H2 N' r1 B0 j
& v  f3 w. I5 R
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号' M  c  L4 g1 K9 J1 \
07      在地表二层 12 01 这个大序列下的子序列编号
, o( ~+ W7 s6 f( P9 s  f
86      物件层的大序列8 T6 h# Y) W9 W' h( Y
00      物件层的大序列下物件的子序列编号
/ ~7 ~9 A% Q2 i% s# D# U7 L
03 03 00  目前不详" I0 k4 |7 R/ L
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
# t" _; j+ H' @- }) i4 E* e; C

4 |8 k8 P4 b8 a4 Z( k
//************************************************************
2 i( h+ ^1 F5 D& Q0 h3 G0 [7 K
// 加载地图基本数据函数;
# R1 D) Z, O% R, R$ I
//************************************************************8 i9 L% @( q* Z; X. S: N5 x  t
5 w4 b; p5 J, G& F, ?
//************************************************************
6 X. a) M/ e4 {) b
// 加载地图基本数据函数;
; V6 p! |7 S5 j5 p+ J
//************************************************************
$ U! q& X, x. l
9 i4 s" J, P: s, F- p
int Cmap:oaddata(char *filnam), W% b$ H  U9 j5 T
{' b# z! X* A" h) N
        int Temdata;
& {0 k9 J# |8 _

, v+ X$ R, H( J0 U+ Q
        if(filnam == "") return 0;
7 Y9 q+ B8 n% y, x' p1 }

! @. k& M  F  ]2 R
        fp_map = fopen(filnam,"rb");
! q+ v* n+ c; @1 _% k& P1 R; M
9 c( S% I7 @# `% X# x0 f
        if(fp_map == NULL)        return 0;1 ]0 i8 r  c7 o  T3 w2 d* Y
, G' Y4 Q8 n) B) A2 A. h, G
        fseek ( fp_map, 16, SEEK_SET);4 V0 p" M" t* q1 I
        fread ( &ShortWidth, 4, 1, fp_map);! V! d/ z( L8 K3 m+ t9 q
        fread ( &Width, 4, 1, fp_map);4 M; _! I; k( o; d* k
        fread ( &Height, 4, 1, fp_map);
! s$ x* q4 Z0 x9 t

. \; D4 N8 D5 [6 F- Q
        int TW = Width / ShortWidth;
* e* ]# z7 C& B& [- O: J
        int TH = Height / ShortWidth;0 P5 ?7 c! x4 G& H8 y

/ |, k- s2 C+ b
        for (int j = 0 ; j < Width ; j++)
  {) l0 A, D0 Q
        {  A6 G# u* g/ l. I! R
                _DELETE_ARRAY(Cell);
$ K8 A/ f6 q* j8 {: S2 j3 @5 F" [- ?/ w
                _DELETE_ARRAY(Role);
7 H# N4 W1 j0 F8 M# U4 B
        }
; c5 Z+ K) F/ A6 Z- k. Q1 g
% ]  j1 [4 ?* c6 a# |- P* @0 e
        Cell = new stCell*[Width];
. U; [9 s2 ~7 I0 g  Z6 o3 j
        Role = new stRole*[Height];) z9 _* X( m* a
        for (j = 0 ; j < Width ; j++)
% f, e5 t4 [; I
        {
' d' c; m* o' X
            Cell[j] = new stCell[Height];
6 ~: r2 h$ h/ N, b
                Role[j] = new stRole[Height];        
5 b9 G5 ?) f: [$ l& l3 L7 Y$ ~( Z
        }        % h* ]! L. D- i$ K

( F" `6 ?, }5 {. H( J! U; a% U
        fseek ( fp_map, 28, SEEK_SET);
9 A$ u) y$ p; r

$ L, g& Z8 Q6 i; k7 f- S& j
        for (int y1 = 0; y1 < TH ; y1++)
  A: }! R, f2 ?7 s4 r
        {
- R# J" S5 |3 e& p$ G; `
                for (int x1 = 0; x1 < TW ; x1++)7 W; v9 J7 y6 F2 k
                {! o& {& G. N  g9 B- y4 M, I
                        fseek ( fp_map, 20, SEEK_CUR);! S+ c  K" z: Y* m" [
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
8 }  c# m: [4 j
                        {
1 G0 _, b1 f6 R
                                for (int x2 = 0; x2 < ShortWidth ; x2++)
$ ~* E' O; X0 [2 b- x
                                {9 f: C" ?: N' P7 d' ]% Y, C  j
                                        fread ( &Temdata , 2, 1, fp_map);
0 T5 _' L/ }9 W) r1 f( H- Q
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
4 s- W4 ?& j1 }( r
% y8 M1 ^- g# L# v1 n3 p0 V
                                        fread ( &Temdata , 1, 1, fp_map);/ E. S7 o1 q, E
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
. ]" D  x# T/ U% M

3 x$ l, p- d' @9 d+ l
                                        fread ( &Temdata , 2, 1, fp_map);
! v% z& E" y( y) ~4 h
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
- b9 e7 a; I( \2 l/ I

( m7 `' S- C; y3 i9 [# r- E* D
                                        fread ( &Temdata , 1, 1, fp_map);
7 L: c! X0 g; L, M$ ^$ l6 S
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
" y# C% z3 w& n4 d# P# G
                                        // 6个字节* b3 {% y/ L. ~3 o7 [" y

+ M  l* i6 r' R' b
                                        fread ( &Temdata , 1, 1, fp_map);
# h  o# A" z( [5 I( }6 b) i1 _* Q
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
0 v2 n/ C' f5 k" J& D3 |6 n
                                       
. Q/ X; r/ U: Y0 ~) U
                                        fread ( &Temdata , 1, 1, fp_map);5 k. m" P# V- J  N% K# y3 S
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;0 u; @- j3 V1 O# _
- m% d* G# H9 J$ q4 s4 V
                                        //fseek ( fp_map,3,SEEK_CUR);
" x; Z5 Q5 Y6 L2 J" t' w
                                        fread ( &Temdata , 1, 1, fp_map);
" ]( d7 I% u& U, A5 S$ ^+ W5 l: Y( h
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;( X) B# b+ v8 c  U6 w; E/ n# f+ G
                                       
' Q7 T/ ^) g& `0 q( y. u
                                        fread ( &Temdata , 2, 1, fp_map);  m. d! ]( c5 ~
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
% k0 T- J& G& J0 p" R$ a
6 y# l3 L* X9 t7 x# A7 X
                                        // 1个字节
: s6 M! P6 Q/ v2 q0 d5 C  }
                                        fread ( &Temdata , 1, 1, fp_map);
7 {! F) A( C0 C- H( o1 s
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;3 E( D! }  T1 ~+ t$ F3 V
                                        //if (ftell(fp_map) > FilZize) return 0;4 i2 d6 |! {+ O
                                }: M+ }8 p3 i8 A3 g+ L" r. Y% ]3 J
                        }7 q* Q. V- M# t$ B4 F& P1 b
                }
' g# I* U  V7 ~  o. ^7 w
        }
1 c9 n: y, T  [$ J/ ^) u9 |. f
  W6 _+ i5 z0 I. O, A8 m
        fclose(fp_map);5 R* z! k$ Z7 ]) [# l* `% a

* e4 Q9 p% Y& J' m: Z# h

3 }7 v; k; n1 m+ D! b
        return 1;
  J! N6 _) y- Q3 H& q8 d* k
}
/ }' L% @2 |4 D. C& C; v. U
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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