游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
: q2 o# A- |4 @

8 s' ?2 Q' Y/ v* s! q
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
: T6 w  c+ m3 O7 |1 |
4 B5 j  E$ ^! A  ~, J: s* T$ p
    第 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 地表一层的序号
) C# V$ D5 k& m' W. B
" [- D# b5 ^1 g, [1 t- H: h
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
2 N. A( h, b* V2 _+ M* t! F/ g
07      在地表二层 12 01 这个大序列下的子序列编号
2 a- _( \2 r" i- E
86      物件层的大序列
4 N, C- t% D- I# p- E; H9 r: [
00      物件层的大序列下物件的子序列编号
" p5 M4 f. x; s
03 03 00  目前不详
! m+ @( T; ]4 y$ H3 d+ f- z
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。5 z1 L& B% y/ W2 K4 `' B9 O3 s' @

% V8 f3 ~# m+ \7 s$ f/ `- d
//************************************************************4 I% `% m, n* }8 J. N9 e
// 加载地图基本数据函数;
: |  ]" R# f$ M+ l) D
//************************************************************8 e7 o8 D( X# H! z; D
1 \- P" V9 z, L2 |% y  [8 m
//************************************************************
4 z2 Y9 ~' w+ u% E1 U2 S+ a) p9 K
// 加载地图基本数据函数;8 J- }/ D; }6 \, n% |( U
//************************************************************. T# k. f/ ?$ U) X! s$ d- x! `

) @. ~6 S, b1 K0 P# O4 v
int Cmap:oaddata(char *filnam)
4 q4 ^* _7 Q+ D8 i
{' m' C+ s/ g' |1 O, [. d
        int Temdata;; |8 Y# Q# e# j, \: q
1 ^2 L: d7 b/ j4 Q
        if(filnam == "") return 0;  G5 q1 ^2 g, g5 _. p8 C

" {8 {4 b! Y+ @# f
        fp_map = fopen(filnam,"rb");* m, B3 E( v0 h! L1 d: y( s1 o
1 F, O; S' X8 F  _' I& a$ m* y; v
        if(fp_map == NULL)        return 0;* _0 T7 C) y. V4 K! L+ ]4 N
" C" q3 u! b& `& M( S1 b/ R
        fseek ( fp_map, 16, SEEK_SET);
. E0 `* }# {2 k7 P- k, D6 L: c
        fread ( &ShortWidth, 4, 1, fp_map);
. l: a' c3 _% B4 J6 R! F+ @7 [
        fread ( &Width, 4, 1, fp_map);2 A1 _9 T: l  H6 m5 r
        fread ( &Height, 4, 1, fp_map);  ?! @; A7 M8 z0 M& C7 {" E
' {3 {, W* `9 k$ `2 e+ p0 `
        int TW = Width / ShortWidth;
, C1 D. ?% V; d* f+ f
        int TH = Height / ShortWidth;
. S3 T8 h( Q1 x8 k! m: p
) O% S+ F* l2 _9 r2 d: A4 M5 [
        for (int j = 0 ; j < Width ; j++), ~; r3 Y- M# @5 _
        {
( X4 V3 a( x- h  v* `% r0 ^
                _DELETE_ARRAY(Cell);2 q' A. M9 d" N$ T
                _DELETE_ARRAY(Role);
- w- T0 F$ d) i7 U: T; {: U. y
        }
1 @9 Q3 G( j4 \% ^+ A
( `( J/ O7 E0 \, [* U( q0 ?/ U
        Cell = new stCell*[Width];
* t5 D& H2 t+ w1 h: p3 N
        Role = new stRole*[Height];
' L0 O' P) A  I
        for (j = 0 ; j < Width ; j++)" R7 [, k* X- v; ?. T
        {" F" H& Q- {# k& X
            Cell[j] = new stCell[Height];0 y  A9 q8 C) P1 E
                Role[j] = new stRole[Height];        
* C8 V3 u1 S+ ]& Q
        }        
2 s$ W' P+ L! v1 |
% i* s8 V5 y5 y& C  w6 A
        fseek ( fp_map, 28, SEEK_SET);
6 |: d7 V1 d9 Q8 O8 t5 c6 K% {

+ I' d% d0 b! e
        for (int y1 = 0; y1 < TH ; y1++)
. U4 }0 ~" f& }3 A- ]- x+ w
        {
' J5 ^" G5 x- a& G! h" ?3 |
                for (int x1 = 0; x1 < TW ; x1++)7 B, J4 C* n3 S1 H( `; R4 j
                {  L- l$ G4 B9 p  F8 ~- f3 n
                        fseek ( fp_map, 20, SEEK_CUR);! a8 |1 S# g& D! v$ D
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
2 ?$ `8 D: |' `$ V  R
                        {, K5 R# o. x# L0 |5 s* Y
                                for (int x2 = 0; x2 < ShortWidth ; x2++)5 K1 P! J! W: z/ L/ h# f
                                {3 `  c$ m/ R- K0 x* p
                                        fread ( &Temdata , 2, 1, fp_map);
4 P- T; b' a  k8 h) ^! j
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;+ D6 n9 J# s" Z# K0 o' D
/ L" I9 k2 ^, h- W: R
                                        fread ( &Temdata , 1, 1, fp_map);1 L% c% J4 G1 B
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;- B$ s* f; L6 c0 L' y& E

5 h, \: x; C) C& \+ r, R, v+ E
                                        fread ( &Temdata , 2, 1, fp_map);+ M' W0 `& s9 X4 @3 b5 a$ e
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;7 W% Y, z& I! u  Q; v1 {
1 G, ?- [- w! ^: [
                                        fread ( &Temdata , 1, 1, fp_map);
% n+ I5 o% ?1 s, ]
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
( c8 O# N! a! P) K- J' j
                                        // 6个字节
  @' z$ W. b' x3 ^6 }. ~+ C! W

5 h% u) T; O% n2 ^( J
                                        fread ( &Temdata , 1, 1, fp_map);
: f' W, O  G) B) O
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;0 o5 P) c$ Y( c
                                          R' A: n% I: U8 q% `- d
                                        fread ( &Temdata , 1, 1, fp_map);
- f& ]* V, u( I% e; q5 F+ I+ z7 T
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;4 C: {! |+ s/ j& m

4 W2 x: c* R9 {) N' W6 J; d, t
                                        //fseek ( fp_map,3,SEEK_CUR);2 o* p; d; B' G& L7 `' p' _
                                        fread ( &Temdata , 1, 1, fp_map);
  n8 K) ^. C/ O/ w
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
: ^- h% y- e: @; n0 E- D2 i
                                        0 v5 w" `0 K  Z# f6 l, G3 M
                                        fread ( &Temdata , 2, 1, fp_map);
4 a( x5 M/ V  x/ |8 j: |8 l
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;) G0 ]8 q6 n3 E' v

: Q) J3 K, o( ^3 Z0 x! i- ^
                                        // 1个字节9 N2 n1 _( S0 z4 }  w
                                        fread ( &Temdata , 1, 1, fp_map);
% ]' P% f% }/ P& l
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
# z- z" P! {: C  F& H/ K
                                        //if (ftell(fp_map) > FilZize) return 0;, \5 W) b. u' J% D
                                }% O3 z$ w' ~! j$ h
                        }
# q, \/ o6 U2 r0 v1 |; D2 J
                }
+ R! O' y( w5 g! O: p5 \8 c
        }
+ d! R8 |( I- W' V6 t! j7 n
" W) G9 e0 v/ L$ w$ F) z
        fclose(fp_map);: k( n. u( X; L4 x- b7 ]+ G+ E
0 p1 m% p2 f" N4 j, s! Z

" X* S* i+ [5 v2 B; w& e
        return 1;2 O: n3 x7 G# N/ r, Y# J6 c/ c
}

* X  V% l3 I" L/ e
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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