www.pudn.com > MUDGame.rar > XMLEngine.cpp


#include "XMLEngine.h" 
 
CXMLEngine::CXMLEngine(const char* szFileName) 
{ 
	m_doc=new TiXmlDocument(szFileName); 
	if(!m_doc->LoadFile()) 
	{ 
		cout<<"初始化失败,导入文件错误!"<RootElement(); 
	//根据xml文件结构,根节点->功能分类->subitem->具体名称 
	TiXmlNode* node=root->FirstChild()->FirstChild(sort); 
	if(node) 
	{ 
		TiXmlNode* temp=node->FirstChild(itemstr); 
		if(temp) 
		{ 
			if(temp->Type()==TiXmlNode::ELEMENT) 
			{ 
				return temp->ToElement()->GetText(); 
			} 
		} 
		else 
		{ 
			cout<<"在节点"<RootElement(); 
	if(root) 
	{ 
		TiXmlNode *node=root->FirstChild(); 
		for(;node;node=node->NextSibling()) 
		{ 
			if(node->Type()==TiXmlNode::ELEMENT) 
				if(strcmp(node->ToElement()->Value(),"skill")==0) 
				{ 
					TiXmlNode* itemiter=node->FirstChild()->NextSibling(); 
					for(;itemiter;itemiter=itemiter->NextSibling()) 
					{ 
						if(itemiter->FirstChild()->Type()==TiXmlNode::ELEMENT) 
						{ 
							if(strcmp(itemiter->FirstChild()->ToElement()->GetText(),skillName)==0) 
							{ 
								skilldata.damage=atoi(itemiter->FirstChild()->NextSibling()->FirstChild()->ToElement()->GetText()); 
								skilldata.needmp=atoi(itemiter->FirstChild()->NextSibling()->FirstChild()->NextSibling()->ToElement()->GetText()); 
								//skilldata.needlevel=atoi(itemiter->FirstChild()->NextSibling()->FirstChild()->NextSibling()->NextSibling()->ToElement()->GetText()); 
								return true; 
							} 
						} 
					} 
				} 
		} 
 
	} 
 
 
	return ret; 
} 
 
 
 
//根据物品名szObjName获取物品的相关数据mobj 
bool CXMLEngine::FillWithObjectData(char * szObjName,Myobject& mobj) 
{ 
	bool bRet=false; 
	strcpy(mobj.objectName,szObjName); 
	TiXmlElement* root=m_doc->RootElement(); 
	if(root) 
	{ 
		for(TiXmlNode* node=root->FirstChild();node;node=node->NextSibling()) 
		{ 
			if(node->Type()==TiXmlNode::ELEMENT) 
				if(strcmp(node->ToElement()->Value(),"res")==0) 
				{ 
					TiXmlNode* iter=node->FirstChild()->NextSibling();//跳过comment 
					for(;iter;iter=iter->NextSibling()) 
					{ 
						if(iter->FirstChild()->Type()==TiXmlNode::ELEMENT) 
						{ 
							if(strcmp(iter->FirstChild()->ToElement()->GetText(),szObjName)==0) 
							{ 
								if(strcmp(iter->FirstChild()->NextSibling()->FirstChild()->ToElement()->GetText(),"hp")==0) 
									mobj.moType=OT_HP; 
								if(strcmp(iter->FirstChild()->NextSibling()->FirstChild()->ToElement()->GetText(),"mp")==0) 
									mobj.moType=OT_MP; 
								if(strcmp(iter->FirstChild()->NextSibling()->FirstChild()->ToElement()->GetText(),"armour")==0) 
									mobj.moType=OT_ARMOUR; 
								if(strcmp(iter->FirstChild()->NextSibling()->FirstChild()->ToElement()->GetText(),"arm")==0) 
									mobj.moType=OT_ARM; 
								if(strcmp(iter->FirstChild()->NextSibling()->FirstChild()->ToElement()->GetText(),"shoe")==0) 
									mobj.moType=OT_SHOE; 
								mobj.value=atoi(iter->FirstChild()->NextSibling()->FirstChild()->NextSibling()->ToElement()->GetText()); 
								mobj.buy=atoi(iter->FirstChild()->NextSibling()->FirstChild()->NextSibling()->NextSibling()->ToElement()->GetText()); 
								mobj.needLevel=atoi(iter->FirstChild()->NextSibling()->FirstChild()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
								bRet=true; 
							} 
						} 
					} 
 
				} 
		} 
	} 
 
 
	return bRet; 
	 
} 
 
 
//核实本场景是否有npc 
bool CXMLEngine::CheckNPC(char* szScence) 
{ 
	bool nRet=false; 
	TiXmlElement* root=m_doc->RootElement(); 
	if(root) 
	{ 
		for(TiXmlNode* node=root->FirstChild();node;node=node->NextSibling()) 
		{ 
			if(node->Type()==TiXmlNode::ELEMENT) 
			{ 
				if(strcmp(node->ToElement()->Value(),"npc")==0) 
				{ 
					TiXmlNode* iter=node->FirstChild()->NextSibling(); 
					for(;iter;iter=iter->NextSibling()) 
					{ 
						if(iter->FirstChild()->Type()==TiXmlNode::ELEMENT) 
						{ 
							if(strcmp(iter->FirstChild()->ToElement()->GetText(),szScence)==0) 
								return true; 
						} 
					} 
				} 
			} 
		} 
	} 
 
	return nRet; 
} 
 
//取得npc的具体信息, 
bool CXMLEngine::FillWithNPCInfo(char* szScence,npc& npcinfo) 
{ 
	bool nRet=false; 
 
	TiXmlElement* root=m_doc->RootElement(); 
	if(root) 
	{ 
		for(TiXmlNode* node=root->FirstChild();node;node=node->NextSibling()) 
		{ 
			if(node->Type()==TiXmlNode::ELEMENT) 
			{ 
				if(strcmp(node->ToElement()->Value(),"npc")==0) 
				{ 
					TiXmlNode* iter=node->FirstChild()->NextSibling(); 
					for(;iter;iter=iter->NextSibling()) 
					{ 
						if(iter->FirstChild()->Type()==TiXmlNode::ELEMENT) 
						{ 
							if(strcmp(iter->FirstChild()->ToElement()->GetText(),szScence)==0) 
							{ 
								//获取npc名称数据 
								strcpy(npcinfo.npcName,iter->FirstChild()->NextSibling()->FirstChild()->ToElement()->GetText());								 
								TiXmlNode* item=iter->FirstChild()->NextSibling()->FirstChild()->NextSibling()->FirstChild();												 
								strcpy(npcinfo.item1,item->ToElement()->GetText());								 
								strcpy(npcinfo.item2,item->NextSibling()->ToElement()->GetText()); 
								strcpy(npcinfo.item3,item->NextSibling()->NextSibling()->ToElement()->GetText()); 
								strcpy(npcinfo.item4,item->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
								strcpy(npcinfo.item5,item->NextSibling()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
								return true; 
								 
							} 
						} 
					} 
				} 
			} 
		} 
	} 
 
	return nRet; 
} 
 
 
//获取等级信息 
bool CXMLEngine::FillWithLevelInfo(char* szlv,LevelInfo& li) 
{ 
	bool bRet=false; 
	li.curlv=atoi(szlv); 
	TiXmlElement* root=m_doc->RootElement(); 
	if(root) 
	{ 
		for(TiXmlNode* node=root->FirstChild();node;node=node->NextSibling()) 
		{ 
			if(node->Type()==TiXmlNode::ELEMENT) 
			{ 
				if(strcmp(node->ToElement()->Value(),"exp")==0) 
				{ 
					TiXmlNode *iter=node->FirstChild()->NextSibling(); 
					for(;iter;iter=iter->NextSibling()) 
					{ 
						if(strcmp(iter->FirstChild()->ToElement()->GetText(),szlv)==0) 
						{ 
							TiXmlNode *item=iter->FirstChild()->NextSibling(); 
							li.hp=atoi(item->FirstChild()->ToElement()->GetText()); 
							li.mp=atoi(item->FirstChild()->NextSibling()->ToElement()->GetText()); 
							li.attack=atoi(item->FirstChild()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							li.defendence=atoi(item->FirstChild()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							li.celerity=atoi(item->FirstChild()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							li.needexp=atoi(item->FirstChild()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							strcpy(li.hasskill,item->FirstChild()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							return true; 
						} 
					} 
				} 
			} 
		} 
 
	} 
 
	return bRet; 
 
} 
 
 
//根据地图位置获取怪物信息 
bool CXMLEngine::FillWithMonsterInfo(char *szpos,monster& m) 
{ 
	TiXmlElement* root=m_doc->RootElement(); 
	if(root) 
	{ 
		for(TiXmlNode* node=root->FirstChild();node;node=node->NextSibling()) 
		{ 
			if(node->Type()==TiXmlNode::ELEMENT) 
			{ 
				if(strcmp(node->ToElement()->Value(),"monster")==0) 
				{ 
					TiXmlNode* iter=node->FirstChild()->NextSibling(); 
					for(;iter;iter=iter->NextSibling()) 
					{ 
						if(strcmp(iter->FirstChild()->ToElement()->GetText(),szpos)==0) 
						{ 
							TiXmlNode* item=iter->FirstChild()->NextSibling()->FirstChild(); 
							strcpy(m.monsterName,item->ToElement()->GetText()); 
							m.hp=atoi(item->NextSibling()->ToElement()->GetText()); 
							m.mp=atoi(item->NextSibling()->NextSibling()->ToElement()->GetText()); 
							m.attack=atoi(item->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							m.hasmoney=atoi(item->NextSibling()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							m.hasexp=atoi(item->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							m.ct=atoi(item->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							m.defence=atoi(item->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->ToElement()->GetText()); 
							//AI部分 
							TiXmlNode* ainode=item->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling()->NextSibling(); 
							m.prob=atoi(ainode->FirstChild()->ToElement()->GetText()); 
							strcpy(m.skillName,ainode->FirstChild()->NextSibling()->FirstChild()->ToElement()->GetText()); 
							m.skilldamage=atoi(ainode->FirstChild()->NextSibling()->FirstChild()->NextSibling()->ToElement()->GetText()); 
							m.needmp=atoi(ainode->FirstChild()->NextSibling()->FirstChild()->NextSibling()->NextSibling()->ToElement()->GetText()); 
 
							return true; 
						} 
					} 
 
				} 
			} 
		} 
 
	} 
 
	return false; 
}