游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
3 e" z" x  X; R
- }2 r, b7 Q4 `' p' B
    地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
: D+ l$ k9 Q% I# C

+ d! \) E9 J5 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 地表一层的序号
9 t% N# c/ `# d5 d) z4 f7 ~+ B! d( `

* {( \! ]: x' a( k) f
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号4 L6 D& L5 n$ d% n0 C
07      在地表二层 12 01 这个大序列下的子序列编号* t  U  O7 a5 f
86      物件层的大序列) s8 h9 n, ?5 R# _. i; h
00      物件层的大序列下物件的子序列编号; |/ p% m$ W! V* C* c  N
03 03 00  目前不详
$ L" w9 c! t4 N# F# H) w
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
5 q$ q9 S+ n$ ~; c
; I: j8 a2 q- i2 U. x) y
//************************************************************0 z: v, }# R  n) n4 E. ?8 y
// 加载地图基本数据函数;
# @- [  w) E; _/ s
//************************************************************; W. P$ @; r% T+ G5 F$ B7 M5 g
  X. E' f( {0 C/ g; q
//************************************************************5 X1 ~* t0 P# {) E1 f, g/ ?
// 加载地图基本数据函数;
* Q4 p0 r3 O5 {7 n2 R
//************************************************************$ H; q- [. y+ ^2 m

5 u5 f; W! c5 r
int Cmap:oaddata(char *filnam)' L2 L' w) M. f' q
{
1 M3 ?( j0 x: |
        int Temdata;: Q$ U( i- Y* _* I- S# S$ H

# ^, w! o' T) P! X' }
        if(filnam == "") return 0;
* |: e, A8 z; e) T3 K

- d& G7 ]  [- x
        fp_map = fopen(filnam,"rb");& @; c' f1 Z% H
: r8 J- h9 L' x6 J; F/ s- z  D
        if(fp_map == NULL)        return 0;
$ K) H' ~) ^8 ~* j& u( }

' N% M. y4 [2 N
        fseek ( fp_map, 16, SEEK_SET);
) R! F6 v$ A+ K, H
        fread ( &ShortWidth, 4, 1, fp_map);6 _4 k3 H+ C, _! Z3 ^
        fread ( &Width, 4, 1, fp_map);
6 v. R( p; K# G( S0 @- }7 P. K
        fread ( &Height, 4, 1, fp_map);
* e& ^) C: `! N. S
+ W$ |$ Z! I2 W: L& }! a( _5 S
        int TW = Width / ShortWidth;
$ L* _# b7 a' c  I/ l6 H8 v/ ?
        int TH = Height / ShortWidth;& |$ w% G: U6 m: Z4 n/ `( T

- J0 s- s0 m$ }1 W8 J
        for (int j = 0 ; j < Width ; j++)
, f- b; G' Y' g5 }4 }3 ^
        {
4 G* E4 \* i5 p0 S  e: t9 U
                _DELETE_ARRAY(Cell);
4 J+ n* \1 C. Y5 Y* T6 _% z9 O
                _DELETE_ARRAY(Role);9 b; ~9 A/ J9 V+ I. O$ k! ?
        }
7 p0 q; n4 N1 h; h. X8 \9 g  M. s

5 S# P0 i# k) a; E- P! a- `' j
        Cell = new stCell*[Width];' h! w0 B" L; v, t  I, K% b
        Role = new stRole*[Height];  I+ v: x: ]" n4 _
        for (j = 0 ; j < Width ; j++)
- a# v8 E3 v- K( h1 a6 K! K
        {) d% a7 `9 @7 w* S* T
            Cell[j] = new stCell[Height];6 O# L; n; E' k( ~" X3 Y
                Role[j] = new stRole[Height];        
0 e- k' ^9 s  z. y! s
        }        
- @9 |' \2 A9 Y, `4 v, `+ w5 B* e
) ^* Q. F" I: h& u
        fseek ( fp_map, 28, SEEK_SET);/ {9 }8 d$ C' H$ j% b
: D9 G9 O. x6 l* q& b
        for (int y1 = 0; y1 < TH ; y1++)
9 f) v: M# P" Z6 ?
        {3 q# }* Y9 _2 c9 I& B0 m
                for (int x1 = 0; x1 < TW ; x1++)  Q: ^5 {4 h+ }. Z- L) d
                {/ N  u, U% N3 y! V( S
                        fseek ( fp_map, 20, SEEK_CUR);" l6 o4 F9 v7 ]/ p3 {4 K: N
                        for (int y2 = 0; y2 < ShortWidth ; y2++)% @& {7 X' @! X3 _/ h
                        {0 b& X# u* I. J
                                for (int x2 = 0; x2 < ShortWidth ; x2++)) b2 z. u3 u$ i0 s' m
                                {% o- \7 P! N+ ~5 i/ ]) r. |
                                        fread ( &Temdata , 2, 1, fp_map);- V9 S4 r' M, }6 f9 W. s; L4 n. q3 z
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;. o5 i- m0 _9 G7 V8 |. p2 i

& A1 f& f  Z5 K% W
                                        fread ( &Temdata , 1, 1, fp_map);' |3 t4 u4 {8 o2 G; s4 P' Z
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;2 N. Q0 k" L" l+ R* b* F5 C

! b/ ^2 u) \) P  g
                                        fread ( &Temdata , 2, 1, fp_map);1 w- f6 G* ?# f
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;4 Q+ o  z2 Q- {$ m8 B
9 }- o8 e2 u) o" E# |/ n
                                        fread ( &Temdata , 1, 1, fp_map);
9 X' k, }+ x9 A8 {; H$ J8 D# z/ V
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;! O; V8 w7 j+ r. i
                                        // 6个字节
4 j, @! x3 J$ P! L
" p" X. s4 |* r6 C
                                        fread ( &Temdata , 1, 1, fp_map);! |3 Q7 g. s+ A( B3 ?) j. r
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
0 T8 ]* s# A& o( q: e6 S$ o
                                       
2 ]. c+ j5 Q  G( Y0 \+ l8 t3 z
                                        fread ( &Temdata , 1, 1, fp_map);) K8 K4 K3 h' c+ Z! M4 P
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
: ^& v1 \4 K1 b& k/ t$ F
& ]- W& f7 ?& j7 r2 {( i
                                        //fseek ( fp_map,3,SEEK_CUR);$ z/ b$ Q5 j! S# E1 T; t
                                        fread ( &Temdata , 1, 1, fp_map);- u0 L  y9 b5 a/ Z3 b$ F5 Z% @5 Q" z
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;2 x' o6 W- z1 k) W  P/ R8 h9 h
                                       
" |9 {  r: d9 K: M
                                        fread ( &Temdata , 2, 1, fp_map);
3 [" v5 X- B  t4 p
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;# Y) b: b( P7 p2 S* l' _
4 r% P% O% ]' X' S) P1 }
                                        // 1个字节
' ?4 S( P7 t7 I6 r
                                        fread ( &Temdata , 1, 1, fp_map);
4 L9 q7 l9 w/ [- F( g. C
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;5 D) H8 I8 `: x
                                        //if (ftell(fp_map) > FilZize) return 0;
* B5 z  Y+ d- k- p9 |; h
                                }4 R2 u& a# O8 |
                        }: W2 [- P' j9 ?' p7 a8 B* Q/ ~5 a
                }
- w3 q. {- F2 L' q, ?
        }& H! ^- l% E# F9 S" q  X5 j

2 W6 M" V, H: P5 R
        fclose(fp_map);; Z0 ]' K, V9 T& G- r! v- n( W& |

) S9 u' g$ \+ t) {- r7 p0 a9 n* t& d
) N4 I2 D8 m: U' t
        return 1;
; S2 z9 E1 g5 ^& g0 e. p% h4 D1 s
}
% i6 ?3 U! ~+ R- v4 q8 t3 ]4 t
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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