问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

梦幻西游的地图是什么格式的

发布网友 发布时间:2022-04-23 13:40

我来回答

4个回答

热心网友 时间:2023-05-21 17:38

《大话西游II》和《梦幻西游》地图文件格式读取类 实现代码

此类是本人编写的,主要用于读取《大话西游II》和《梦幻西游》地图文件格式, 而对于地图中各个单元的处理功能不包含在这个类中,可以写其他相关的类做这个方面的处理.本类主要用在教学研究方面,不得应用在商业领域以及其他侵害网易公司利益的地方. 本人不保证此类的安全和质量.如有疑虑请勿使用.参考资料:
Map File Old Format
Map File New Format
大话1302新地图格式
大话0038新地图格式

/*********************************************************************************************
* 《大话西游II》和《梦幻西游》
* 地图文件格式读取类
*---------------------------------------------------------------------------------------------
* 版本 2.2.0
*
* 王大理 <wdl@sina.com>
* 2006年05月20日
*---------------------------------------------------------------------------------------------
* 声明:
* 本源代码应用于网易公司的网络游戏《大话西游II》和《梦幻西游》地图文件格式的读取。
* 与此源代码相应的文件格式版权属于网易公司所有。
* 此源代码应用于教育目的,禁止用于商业目的,否则后果自负,本源代码作者不承担任何责任。
* 如有异议请务使用本源代码,并永久删除此源代码。
*---------------------------------------------------------------------------------------------
* 版权所有(c) 2006 王大理 , 保留所有权利。
*********************************************************************************************/
#include "ReadGameMap.h"
using namespace NetEase; // 使用NetEase命名空间ReadGameMap::ReadGameMap(void)
{
//m_MapWidth=0;// 初始化地图的宽度
//m_MapHeight=0;// 初始化地图的高度
m_SubMapWidth=320;// 初始化子地图宽度
m_SubMapHeight=240;// 初始化子地图高度
m_MaskTemp=1;// 初始化MASK临时变量
//m_SubMapRowNum=0;// 子地图的行数量
//m_SubMapColNum=0;// 子地图的列数量
//m_SubMapTotal=0;// 子地图的总数
}ReadGameMap::~ReadGameMap(void)
{
}// 加载地图文件
bool ReadGameMap::LoadMap(char *filename)
{
FILE *fp;
//m_FileName=filename; // 全局变量地图文件名strcpy(m_FileName,filename);// 打开流
if( (fp = fopen(m_FileName, "rb" )) == NULL)
{
printf("打开文件错误。\n");
return false;
}// 读取地图文件头
MapHeader header;
fread(&header, sizeof(MapHeader), 1, fp); // 读取地图文件头m_MapWidth=header.Width; // 地图的宽度
m_MapHeight=header.Height; // 地图的高度m_SubMapRowNum=ceil((float)(m_MapWidth/m_SubMapWidth)); // 计算行中子地图的数量
m_SubMapColNum=ceil((float)(m_MapHeight/m_SubMapHeight)); // 计算列中子地图的数量
m_SubMapTotal=m_SubMapRowNum*m_SubMapColNum; // 计算地图中总的子地图数量//printf("Flag=0x%X\n",header.Flag);
//printf("Width=%d\n",header.Width);
//printf("Height=%d\n",header.Height);
//printf("m_SubMapTotal=%d\n",m_SubMapTotal);// 判断文件头是否正确(MAPX) && (M1.0)
if((header.Flag!=0x4D415058) && (header.Flag!=0x4D312E30))
{
printf("未支持的地图文件格式。\n");
return false;
}// 读取子地图偏移值列表
m_SubMapOffsetList=new uint32[m_SubMapTotal]; // 自动分配列表空间
fread(m_SubMapOffsetList, sizeof(uint32), m_SubMapTotal, fp); // 读取列表
fread(&m_MapSize, sizeof(uint32), 1, fp); // 读取文件大小或文件头的大小//printf("m_SubMapOffsetList=0x%X\n",m_SubMapOffsetList[60]);// MAPX
if (header.Flag == 0x4D415058)
{
ReadJPGH(fp); // 读取JPGH的数据
m_FileType=1; // 设置地图文件类型
}

// M1.0
if (header.Flag == 0x4D312E30)
{
ReadHEAD(fp); // 读取新地图的数据
m_FileType=2; // 设置地图文件类型
}fclose(fp); // 关闭流
return true;
}// 读取地图JPGH的数据
bool ReadGameMap::ReadJPGH(FILE *fp)
{
UnitHeader JpegHead;
fread(&JpegHead,sizeof(JpegHead),1,fp); // 读取单元头的数据// 判断标志是否正确(HGPJ)
if (JpegHead.Flag!=0x4A504748)
{
printf("JPEG HEADER 标志错误。\n");
return false;
}
m_jpgh.Data = new uint8[JpegHead.Size]; // 分配单元数据的内存空间
m_jpgh.Size=JpegHead.Size;
fread(m_jpgh.Data,JpegHead.Size,1,fp); // 读取单元数据
//PrintHex(m_JpegHeadDate,JpegHead.Size);
return true;
}// 读取地图HEAD的数据
bool ReadGameMap::ReadHEAD(FILE *fp)
{
uint32 HeaderSize;HeaderSize=m_SubMapOffsetList[0]-m_MapSize; // 计算地图头数据的大小
m_head.Size=HeaderSize;
m_head.Data = new uint8[HeaderSize];
fread(m_head.Data,sizeof(uint8),HeaderSize,fp); // 读取地图头数据
//PrintHex(MapHeadData.Data,MapHeadData.Size);
return true;
}// 读取地图的单元数据
bool ReadGameMap::ReadUnit(uint32 UnitNum)
{
FILE *fp;
int64 seek;
bool Result;
bool loop=true;
char * filename;
m_MaskTemp=1;// 打开流
//printf("m_FileName=%s\n",m_FileName);
if( (fp = fopen(m_FileName, "rb" )) == NULL)
{
printf("打开文件错误。\n");
return false;
}seek=m_SubMapOffsetList[UnitNum];
//printf("Seek=0x%X\n",seek);
fseek(fp,seek,SEEK_SET);
fread(&m_MaskNum,sizeof(uint32),1,fp); // 读取MASK的数量
//printf("m_MaskNum=%d\n",m_MaskNum);// 新地图使用
if ((m_FileType==2) && (m_MaskNum>0))
{
//printf("New Map!\n");
m_MaskList = new uint32[m_MaskNum];
fread(m_MaskList,sizeof(uint32),m_MaskNum,fp);
}UnitHeader unit;while(loop)
{
fread(&unit,sizeof(UnitHeader),1,fp); // 读取单元的头数据//printf("单元标志=%X\n", unit.Flag);
//printf("单元大小=%d\n", unit.Size);switch(unit.Flag)
{
// GAMI "47 41 4D 49"
case 0x494D4147:
Result=ReadIMAG(fp,unit.Flag,unit.Size);
break;// GEPJ "47 45 50 4A"
case 0x4A504547:
Result=ReadJPEG(fp,unit.Flag,unit.Size);
break;// KSAM "4B 53 41 4D"
case 0x4D41534B:
Result=ReadMASK(fp,unit.Flag,unit.Size);
break;// KOLB "4B 4F 4C 42"
case 0x424C4F4B:
Result=ReadBLOK(fp,unit.Flag,unit.Size);
break;// LLEC "4C 4C 45 43"
case 0x43454C4C:
Result=ReadCELL(fp,unit.Flag,unit.Size);
break;// GIRB "47 49 52 42"
case 0x42524947:
Result=ReadBRIG(fp,unit.Flag,unit.Size);
loop=false;
break;// 默认处理
default:
m_EndUnit.Flag=unit.Flag;
m_EndUnit.Size=unit.Size;
loop=false;
//printf("Flag错误!\n");
//printf("Flag=0x%X\n\n",unit.Flag);
break;
//return false;
}}
fclose(fp);
}// 读取地图宽度
uint32 ReadGameMap::ReadMapWidth()
{
return m_MapWidth;
}// 读取地图高度
uint32 ReadGameMap::ReadMapHeight()
{
return m_MapHeight;
}// 读取子地图的宽度
uint32 ReadGameMap::ReadSubMapWidth()
{
return m_SubMapWidth;
}// 读取子地图的高度
uint32 ReadGameMap::ReadSubMapHeight()
{
return m_SubMapHeight;
}// 读取子地图的总数量
uint32 ReadGameMap::ReadSubMapTotal()
{
return m_SubMapTotal;
}// 读取子地图中Mask的总数
uint32 ReadGameMap::ReadMaskTotal()
{
return m_MaskNum;
}// 读取地图文件大小
uint32 ReadGameMap::ReadMapSize()
{
return m_MapSize;
}// 读取地图IMAG的数据
bool ReadGameMap::ReadIMAG(FILE *fp, uint32 Flag, uint32 Size)
{
if (Flag==0x494D4147)
{
m_imag.Data = new uint8[Size]; // 分配单元数据的内存空间
fread(m_imag.Data,Size,1,fp); // 读取单元IMAG的数据
m_imag.Size=Size;
//printf("IMAG的数据:\n");
//PrintHex(m_ImagData,Size);
}
else
{
printf("IMAG标志错误!\n");
return false;
}
return true;
}// 读取地图JPEG的数据
bool ReadGameMap::ReadJPEG(FILE *fp, uint32 Flag, uint32 Size)
{
if (Flag==0x4A504547)
{
fread(&m_SubMapWidth,sizeof(uint16),1,fp); // 子地图的宽度
fread(&m_SubMapHeight,sizeof(uint16),1,fp); // 子地图的高度
m_jpeg.Data = new uint8[Size-4]; // 分配单元数据的内存空间
fread(m_jpeg.Data,Size-4,1,fp); // 读取单元JPEG的数据
m_jpeg.Size=Size;
//printf("JPEG的数据:\n");
//PrintHex(m_JpegData,Size-4);
}
else
{
printf("JPEG标志错误!\n");
return false;
}return true;
}// 读取地图MASK的数据
bool ReadGameMap::ReadMASK(FILE *fp, uint32 Flag, uint32 Size)
{
if (Flag==0x4D41534B)
{
//printf("m_MaskTemp=%d\n",m_MaskTemp);
m_mask[m_MaskTemp].Data = new uint8[Size]; // 分配单元数据的内存空间
m_mask[m_MaskTemp].Size=Size;
fread(m_mask[m_MaskTemp].Data,Size,1,fp); // 读取单元MASK的数据
//printf("MASK的数据:\n");
//PrintHex(mask[m_MaskTemp].m_MaskData,Size);m_MaskTemp++;
}
else
{
printf("MASK标志错误!\n");
return false;
}return true;
}// 读取地图BLOK的数据
bool ReadGameMap::ReadBLOK(FILE *fp, uint32 Flag, uint32 Size)
{
if (Flag==0x424C4F4B)
{
m_blok.Data = new uint8[Size]; // 分配单元数据的内存空间
fread(m_blok.Data,Size,1,fp); // 读取单元BLOK的数据
m_blok.Size=Size;
//printf("BLOK的数据:\n");
//PrintHex(m_BlokData,Size);
}
else
{
printf("BLOK标志错误!\n");
return false;
}return true;
}// 读取地图CELL的数据
bool ReadGameMap::ReadCELL(FILE *fp, uint32 Flag, uint32 Size)
{
if (Flag==0x43454C4C)
{
m_cell.Data = new uint8[Size]; // 分配单元数据的内存空间
fread(m_cell.Data,Size,1,fp); // 读取单元CELL的数据
m_cell.Size=Size;
//printf("CELL的数据:\n");
//PrintHex(m_CellData,Size);
}
else
{
printf("CELL标志错误!\n");
return false;
}return true;
}// 读取地图BRIG的数据
bool ReadGameMap::ReadBRIG(FILE *fp, uint32 Flag, uint32 Size)
{
if (Flag==0x42524947)
{
m_brig.Data = new uint8[Size]; // 分配单元数据的内存空间
fread(m_brig.Data,Size,1,fp); // 读取单元BRIG的数据
m_brig.Size=Size;
//printf("BRIG的数据:\n");
//PrintHex(m_BirgData,Size);
}
else
{
printf("BRIG标志错误!\n");
return false;
}return true;
}// 读取JPGH的数据
MapData ReadGameMap::ReadJpghData()
{
return m_jpgh;
}// 读取HEAD的数据
MapData ReadGameMap::ReadHeadData()
{
return m_head;
}// 读取IMAG的数据
MapData ReadGameMap::ReadImagData()
{
return m_imag;
}// 读取JPEG的数据
MapData ReadGameMap::ReadJpegData()
{
return m_jpeg;
}
// 读取MASK的数据
MapData ReadGameMap::ReadMaskData(uint8 ID)
{
return m_mask[ID];
}
// 读取BLOK的数据
MapData ReadGameMap::ReadBlokData()
{
return m_blok;
}// 读取CELL的数据
MapData ReadGameMap::ReadCellData()
{
return m_cell;
}// 读取BRIG的数据
MapData ReadGameMap::ReadBrigData()
{
return m_brig;
}

热心网友 时间:2023-05-21 17:38

楼主你好!地图的格式一般是.map如果改了还是不行,建议从朋友电脑或网吧拷贝map的一个文件夹粘贴到自己梦幻西游的文件夹内就可是,选择全部替换o(∩_∩)o希望对您有帮助

热心网友 时间:2023-05-21 17:39

用客户端移到别的文件夹里,重新安装下

热心网友 时间:2023-05-21 17:39

我想问你下 你现在游戏能玩吗? 游戏能玩就随他吧.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长期胃胀怎么调理 魔渊之刃弓箭手攻略 弓箭手法盘装备发育攻略 妻妾迎新送死,倏恩倏爱,倏痛倏悲,缠绵不了是什么意思? 请学过美术或者动漫游戏设计的人回答我的问题。 画一个穿着和头型都相 ... ...和“我有一个可爱并且很淘气的女儿”用英文怎么说 “如果你叫我回答这个问题就是浪费时间,希望老师能找下一个学生”有英 ... 加勒比海盗拍了几部 《加勒比海盗5》第四部女主或回归 与开花同框 购买佳能相机开出的正式发票是佳能公司统一的发票还是各销售公司自己... ...我想早点上美国陪他,请问现在可以办旅游探亲证吗? .map是什么文件?用什么可以打开? cs1.6版本的地图文件到底是什么格式的? 现在,国内提供导航电子地图的厂家有哪些?地图数据格式和接口是怎样的?谢谢热心人士 魔兽地图文件格式w3m和w3x有什么区别 arcmap可用哪些格式的文件? 网站地图的文件格式是什么? MapGIS7.0的基本文件格式是什么? arcgis专用地图格式有哪些 荣耀10相机有防抖吗 电子地图的文件格式有哪一些 map地图都有什么格式? 上海公积金转移到外地流程离职证明没有了 在上海离职了,公积金可以转回老吗 上海辞职后公积金提取要怎么操作?有人知道吗? 上海公积金离职后是否能全部提取? 上海公积金本地人辞职后可以提取出来吗? 上海离职后如何办社保公积金转移? 辞职回老家上海公积金怎么转回去 怎样防微信抢红包封号7天 上海离职后公积金怎么办 地图软件的数据都是哪里来的? xplane里面的地图数据格式 .dsf 用什么软件可以打开? 如何制作电子地图,需要采集什么数据,格式是怎样的,用什么生成工具 电热水龙头的使用寿命? 水龙头使用寿命一般多久 一般电热水龙头都可以用几年呢? 如何保养水龙头延长使用寿命 龙头一般能用多久? 水龙头应用寿命是多久? 关于电热水龙头的使用寿命?谁知道啊? 绿太阳水龙头仁义用寿命 电热水龙头哪种的寿命长? 水龙头的阀芯可以用多久? 水龙头使用频次高,寿命一般都不长,普通的水龙头只有3-5年左右的寿命,如何降低龙头损耗,增加寿命呢? 谁知道电热水龙头好不好用,一般寿命是多少 水龙头用久了就会生锈,喝了这样水对身体也会有一定的影响,有哪些方法可以有效去除? a类基金和c类基金区别是什么? 水龙头使用寿命是多久?应该注意什么 电热水龙头使用寿命是多少年?安全性能怎样?哪种品牌的质量好一些? 孕晚期可以吃柿子饼吗