コード例 #1
0
ファイル: KMapSetting.cpp プロジェクト: zhuxiaokun/workshop
bool KMapSettings::initialize(StreamInterface& si)
{
	char buf[64];

	XMLDomParser parser;
	if(!parser.Initialize())
	{
		Log(LOG_ERROR, "error: KMapSettings::initialize, init xml parser");
		return false;
	}
	
	XMLElementNode xmlRoot;
	if(!parser.Parse(si, xmlRoot))
	{
		Log(LOG_ERROR, "error: KMapSettings::initialize, parse xml, %s", parser.GetErrorMsg());
		return false;
	}

	KMapSetting ms;
	XMLNodeColl coll = xmlRoot.QueryChildren2("MapSettings/Map");
	int n = coll.Size();
	for(int i=0; i<n; i++)
	{
		ms.clear();

		XMLElementNode* mapXml = (XMLElementNode*)coll.GetNode(i);
		const char* mapName = mapXml->QueryAtt("file")->c_str();
		const char* descName = mapXml->QueryAtt("name")->c_str();

		ms.m_mapID = mapXml->QueryAtt("id")->Integer();
		if(mapXml->QueryAtt("dup"))
		{
			ms.m_duplicate = mapXml->QueryAtt("dup")->Integer() ? 1:0;
		}
		ms.m_mapName = KBuffer64k::WriteData(mapName, strlen(mapName)+1);
		ms.m_descName = KBuffer64k::WriteData(descName, strlen(descName)+1);

		if(mapXml->QueryAtt("EntryPoint.value")) ms.setEntryPoint(0, mapXml->QueryAtt("EntryPoint.value")->Integer());
		if(mapXml->QueryAtt("BornPoint.value")) ms.setBornPoint(0, mapXml->QueryAtt("BornPoint.value")->Integer());
		if(mapXml->QueryAtt("RelivePoint.value")) ms.setRelivePoint(0, mapXml->QueryAtt("RelivePoint.value")->Integer());
		if(mapXml->QueryAtt("ExitPoint.value")) ms.setExitPoint(0, mapXml->QueryAtt("ExitPoint.value")->Integer());
		if(mapXml->QueryAtt("ReturnPoint.value")) ms.setReturnPoint(0, mapXml->QueryAtt("ReturnPoint.value")->Integer());

		int len = sprintf_k(buf, sizeof(buf), "Map_%d", ms.m_mapID);
		ms.m_luaTable = KBuffer64k::WriteData(buf, len+1);

		ms.m_createTimeout = ms.getIntAttr("createTimeout", 2*60);
		ms.m_idleTimeout = ms.getIntAttr("idleTimeout", ms.m_duplicate?5*60:-1);
		ms.m_carePlayerEnter = ms.getBoolAttr("carePlayerEnter", false) ? TRUE : FALSE;

		m_maps[ms.m_mapID] = ms;
	}
	return true;
}
コード例 #2
0
ファイル: KWorldSetting.cpp プロジェクト: zhuxiaokun/workshop
bool KWorldSettings::initialize(KMapSettings& mss, StreamInterface& fi)
{
	char buf[128];

	XMLDomParser parser;
	if(!parser.Initialize())
	{
		Log(LOG_ERROR, "error: KWorldSettings::initialize, init xml parser");
		return false;
	}

	XMLElementNode xmlRoot;
	if(!parser.Parse(fi, xmlRoot))
	{
		Log(LOG_ERROR, "error: KWorldSettings::initialize, parse xml, %s", parser.GetErrorMsg());
		return false;
	}

	KWorldSetting ws;

	XMLNodeColl coll2; int c;
	XMLNodeColl coll = xmlRoot.QueryChildren2("WorldSettings/World");

	int n = coll.Size();
	for(int i=0; i<n; i++)
	{
		ws.clear();

		XMLElementNode* worldXml = (XMLElementNode*)coll.GetNode(i);
		const char* worldName = worldXml->QueryAtt("name")->c_str();

		ws.m_mapID = worldXml->QueryAtt("map")->Integer();
		ws.m_mapSetting = mss.getMapSetting(ws.m_mapID);
		if(!ws.m_mapSetting)
		{
			Log(LOG_ERROR, "error: KWorldSettings::initialize, map %d not found", ws.m_mapID);
			return false;
		}

		ws.m_worldType = worldXml->QueryAtt("type")->Integer();
		ws.m_worldName = KBuffer64k::WriteData(worldName, strlen(worldName)+1);

		int len = sprintf_k(buf, sizeof(buf), "WorldMonitor_%d", ws.m_worldType);
		ws.m_luaTable = KBuffer64k::WriteData(buf, len+1);

		coll2 = worldXml->QueryChildren2("Monster"); c = coll2.Size();
		for(int k=0; k<c; k++)
		{
			KWorldSetting::Monster monster;
			XMLElementNode* elemXml = (XMLElementNode*)coll2.GetNode(k);
			const char* fileName = elemXml->QueryAtt("value")->c_str();
			monster.first = elemXml->QueryAtt("id")->Integer();
			monster.second = KBuffer64k::WriteData(fileName, strlen(fileName)+1);
			ws.m_monsters.push_back(monster);
		}

		coll2 = worldXml->QueryChildren2("TreasureCase"); c = coll2.Size();
		for(int k=0; k<c; k++)
		{
			XMLElementNode* elemXml = (XMLElementNode*)coll2.GetNode(k);
			const char* fileName = elemXml->QueryAtt("value")->c_str();
			ws.m_tcs.push_back(KBuffer64k::WriteData(fileName, strlen(fileName)+1));
		}

		coll2 = worldXml->QueryChildren2("Transimission"); c = coll2.Size();
		for(int k=0; k<c; k++)
		{
			XMLElementNode* elemXml = (XMLElementNode*)coll2.GetNode(k);
			const char* fileName = elemXml->QueryAtt("value")->c_str();
			ws.m_transes.push_back(KBuffer64k::WriteData(fileName, strlen(fileName)+1));
		}

		coll2 = worldXml->QueryChildren2("Traffic"); c = coll2.Size();
		for(int k=0; k<c; k++)
		{
			XMLElementNode* elemXml = (XMLElementNode*)coll2.GetNode(k);
			int trafficRoute = elemXml->QueryAtt("value")->Integer();
			ws.m_traffics.push_back(trafficRoute);
		}

		//coll2 = worldXml->QueryChildren2("Scene"); c = coll2.Size();
		//for(int k=0; k<c; k++)
		//{
		//	KWorldSetting::Scene scene;
		//	XMLElementNode* elemXml = (XMLElementNode*)coll2.GetNode(k);
		//	scene.first = elemXml->QueryAtt("x")->Integer();
		//	scene.second = elemXml->QueryAtt("y")->Integer();
		//	ws.m_scenes.insert_unique(scene);
		//}

		this->_addWorldType(ws);
	}

	return true;
}