本文的地图配置是针对游戏服务器中的场景和副本用到的地图相关配置。
设计上:
地图配置类型有
1)地图进入需求配置
2)地图阻挡配置(地图编辑器编辑 :地图阻挡 。 安全区域和普通区域)
3)地图区域配置(跳转点、地图特殊区域类型、复活区域、特殊怪出现区域)
4)副本地图怪物配置(npc出生信息)
5)普通地图的怪物配置(npc出生信息)
6)功能性npc配置(功能型npc出生信息)
1、地图配置初始化
场景对象继承场地地图基类,初始化时会读取所有的场景地图配置。
地图配置初始化如下:
bool scene_map_base::init(nXMLParser& nxml)
{
if(!map_base::init(nxml))
{
return false;
}
//1)地图进入需求配置
if(!nxml.getNodeAttrStr("xmlname", xmlFileName, MAX_NAME_LEN)//地图配置文件名字
|| !nxml.getNodeAttrInt("checklevel", &this->enter_level)//进入等级
|| !nxml.getNodeAttrInt("needmoney", &this->enter_money))//进入金钱
{
assert(false && "加载地图大小失败.");
return false;
}
g_log->debug("name:%s,level:%u,money:%u",this->name.c_str(), this->enter_level, this->enter_money);
//2)地图阻挡(地图编辑器编辑 :地图阻挡 。 安全区域和普通区域)
if(!load_map_block())
{
assert(false && "加载阻挡失败.");
return false;
}
//3)地图区域配置文件(跳转点、地图区域类型、复活区域、特殊怪出现区域)
if(!loadMapConfig())
{
assert(false && "加载地图配置文件失败.");
return false;
}
if(((maptype & SceneMapType_Demon) || (maptype & SceneMapType_Castle) || (maptype & SceneMapType_Fort)
|| (maptype & SceneMapType_Activity_1)))
{
//4)副本地图怪物配置文件(npc出生信息)
if (!loadMapSummonNpcConfig())
{
assert(false && "加载副本地图NPC配置文件失败.");
return false;
}
debug_log("map id = %u, maptype = %u", this->id, this->maptype);
}
else
{
//5)普通地图的怪物配置文件(npc出生信息)
if(!loadMapMonsterConfig())//加载怪物配置文件
{
assert(false && "加载怪物配置文件失败.");
return false;
}
}
//6)功能性npc配置文件(功能型npc出生信息)
if(!loadFuncNpcConfig())
{
assert(false && "加载地图配置文件失败.");
return false;
}
return true;
}
2、地图阻挡配置
地图分为安全区域(不可战斗区域)和普通区域(可战斗区域)。
这两个区域都是含有阻挡和非阻挡的格子。加载地图阻挡时会读取地图编辑器生成的配置文件数据到内存的地图数据数组。
阻挡配置文件数据包含:
地图宽高、地图id、名字
普通区域(阻挡和可行走区域)
安全区域(阻挡和可行走区域)
(1)加载阻挡编辑数据
bool scene_map_base::load_map_block()
{
char tempid[32];
nGraphAlgo::int2str(this->id,tempid);
std::string temp_file = ""