游客您好
  • 点击联系客服

    在线时间:8:30-18:00

    客服微信

    Wkr-3000y-kf

    电子邮件

    3000y@wenkeruan.com
  • 手机版

    随时掌握游戏动态

  • 扫一扫二维码

    添加微信客服

Lv.7 版主
8号会员,9活跃值,2022.09.01 加入
  • 127发帖
  • 123主题
  • 0关注
  • 0粉丝
这个人很懒,什么也没有留下。
独家推荐 更多>

深度解释map地图文件

[复制链接]
异仟年认证商人 发表于 2022-9-5 20:39:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
*.map 文件是记载地图信息的文件。8 n/ v! Y+ A' b9 e* @% q; w* v
+ I. E2 D1 e! o; W- a$ S+ I
    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
6 n6 E: u! Z; ^; j
9 O/ R8 _) [5 Y+ U; E    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 地表一层的序号' f5 a% T% D% n. `
9 ]" e7 R  p( t. E5 c4 d' |% U. ?9 i' k* ]
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号3 g6 f) X5 \- b) E
07      在地表二层 12 01 这个大序列下的子序列编号1 y" `4 x0 e! X$ T5 t. |5 K" E
86      物件层的大序列( `- G8 T: s8 J; o/ z
00      物件层的大序列下物件的子序列编号. C# M* Z4 B, z/ l: G1 s# Q
03 03 00  目前不详, p& c" C, n: \4 f) _  E7 W: E( ?
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
+ ^6 q3 Y; M+ q/ W. c+ P
1 t$ B. a" l& t6 l, c//************************************************************5 Q- |( u9 q* t+ E/ G4 b4 X: g
// 加载地图基本数据函数;! Y- @# K( `% @1 Z  C. C% \
//************************************************************  |1 l5 Q" M- L# K  Q' N

2 K/ O0 i+ G. e5 n' \( D//************************************************************
3 j2 }( ~+ J# I4 k8 U// 加载地图基本数据函数;' v2 \0 l' G& d7 T4 N4 ^8 a
//************************************************************& [0 Q7 L6 _0 s& }$ A6 M6 H
' p. L9 f" E: Z) }" D0 [4 f1 C& x& [
int Cmap:oaddata(char *filnam)
. E+ n* \9 e7 A& E$ o{) P0 |- A- L/ X, z# v
        int Temdata;
$ }( J* a1 ~  n! E
1 ]# ^- J2 E- S7 S7 K5 z        if(filnam == "") return 0;
$ |( x* l3 l; U, M! A
+ r! Q1 H. c( |: f9 S- x        fp_map = fopen(filnam,"rb");
) u+ |& C+ B# [$ O- I  ]
# N/ G' n) H/ l% s. B/ k        if(fp_map == NULL)        return 0;
8 N9 J3 F7 k* y4 C  _4 v+ s% ]9 |; d4 [! Y8 X/ @
        fseek ( fp_map, 16, SEEK_SET);! e' r, J& ^6 y
        fread ( &ShortWidth, 4, 1, fp_map);
8 Z# v/ L5 p' E& R/ @( d        fread ( &Width, 4, 1, fp_map);2 Z- Q# |9 m( l; W) B2 c
        fread ( &Height, 4, 1, fp_map);
! p' o# ]9 p4 \1 k3 w
8 e  V: c& U5 }" I% i# i* X        int TW = Width / ShortWidth;) }# R9 ^! \8 t. t) i
        int TH = Height / ShortWidth;% Q4 Z: O, e# q. q- A

1 ?0 y, _8 S9 S1 e% g0 X$ ?        for (int j = 0 ; j < Width ; j++)
& O1 L9 R& `* P2 H& P        {
" p. ^( r' U0 j/ G: r& t, s                _DELETE_ARRAY(Cell);" @1 D( f2 f6 o
                _DELETE_ARRAY(Role);
3 s* Q9 V! B4 |9 U+ O        }! `& j3 w9 P7 J/ {. b
8 ^' ^4 b+ ~" q1 `. j0 T% f, b7 U
        Cell = new stCell*[Width];, e1 l' K& @9 u
        Role = new stRole*[Height];
4 y4 n1 M" v, c. z% G* C        for (j = 0 ; j < Width ; j++)
4 ?8 }) f% Q" F        {5 q+ e; Q  p: O* k) @9 {! X
            Cell[j] = new stCell[Height];
7 X( C. n+ z6 {5 ~- o. J$ X                Role[j] = new stRole[Height];        1 a1 L) i4 h9 f+ Q  B
        }        
6 ~7 G+ N# i  u+ F* e: M: I, `) T% x2 N: }( {$ j
        fseek ( fp_map, 28, SEEK_SET);" U/ |! F- j) @5 M6 Y
6 h. v2 D/ ^/ Q9 o
        for (int y1 = 0; y1 < TH ; y1++)( ]! f  n0 B; p: ^( T5 {2 K
        {
( z4 L- s, L% Z- B- c' q; L                for (int x1 = 0; x1 < TW ; x1++)
( |; p3 T% B& N' o" k                {
6 m. h: Q7 [3 ~0 F6 ~                        fseek ( fp_map, 20, SEEK_CUR);* h+ i9 J9 U# q( B* n/ N# O
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
0 ~6 }& A4 ^+ x8 K! `: T; e                        {3 D, O* c+ v4 v6 ^7 g% x
                                for (int x2 = 0; x2 < ShortWidth ; x2++)5 f" u4 M* O3 C% ^! r
                                {$ y/ N0 S8 E2 k! P" B  k( s3 G
                                        fread ( &Temdata , 2, 1, fp_map);7 f8 `$ g$ p" b) _# E0 n
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;' g9 M6 G) m0 K, Y8 R4 a  R2 M+ r+ ~" t

. d) x: W/ Y+ \3 G4 @1 ?5 }7 E& [                                        fread ( &Temdata , 1, 1, fp_map);
) C5 y: R9 M4 ^6 F  n/ [                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
* K: m% ]! m% k* M8 D
7 e! X8 r& A1 d$ A, J8 H& |                                        fread ( &Temdata , 2, 1, fp_map);
% X5 |& k: O1 c: u& y: }4 w% s. ]                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
* M+ a+ p* Y/ F+ X0 Z
8 B4 K- c. W3 N' ?; f! X( z9 b                                        fread ( &Temdata , 1, 1, fp_map);7 G1 i. N' L6 r! o- k, }
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
8 r# U: M+ K( w: g& y                                        // 6个字节
! I+ l( ~( |) f3 P. y
' P4 ~$ j1 U. ]1 h. u6 s                                        fread ( &Temdata , 1, 1, fp_map);0 U/ F1 V: H0 F
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;# T6 t! U5 f6 A5 O5 t
                                       
  x9 F( a: O, _5 Y                                        fread ( &Temdata , 1, 1, fp_map);
; G+ _7 I+ h7 g, h& s0 y; \                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
. L1 D9 }7 a4 M* Q' y
. v  C1 M1 U' o6 X, h# s: E( M: E# ^                                        //fseek ( fp_map,3,SEEK_CUR);
, L: A. E) _3 K0 g) g                                        fread ( &Temdata , 1, 1, fp_map);
/ e  d; r' z& o8 |& F" n                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;+ h; [4 ?: G' |2 W% i
                                        # Y' ?) v/ `4 G
                                        fread ( &Temdata , 2, 1, fp_map);
. M3 _$ d! W! d7 |/ {$ b7 H! J                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;# j1 _  C8 i* Y& E" M' l

. ~8 i8 R( Y  H  L" M                                        // 1个字节1 d  A3 o- w& `0 Q; S
                                        fread ( &Temdata , 1, 1, fp_map);
1 E. U( [) H  D) J. Q5 v: p                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
7 x8 ^1 K) m% K* l% c4 E                                        //if (ftell(fp_map) > FilZize) return 0;
7 t( ~' Q2 Z6 N                                }
! ~, f) H# C" k% g* v! P                        }& T$ Q# {9 @% l& v
                }: K, f8 d3 S9 }2 V1 h
        }
9 M1 n2 r/ o/ [9 `9 Z: I/ m0 J( J' Y, \" g' ?4 k  F& F
        fclose(fp_map);  v5 y5 V5 ^! @" e$ f
$ B4 u. Z: U8 O- _- G

% ^$ x& {( z6 N2 f* @' e6 X# j        return 1;0 z1 P1 t& i" b5 `
}
* B( c  g2 k& o# |
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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