⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlengine.cpp

📁 改工程是一个基于select模型实现的MUD游戏
💻 CPP
字号:
#include "XMLEngine.h"

CXMLEngine::CXMLEngine(const char* szFileName)
{
	m_doc=new TiXmlDocument(szFileName);
	if(!m_doc->LoadFile())
	{
		cout<<"初始化失败,导入文件错误!"<<endl;
	}
}

CXMLEngine::~CXMLEngine(void)
{
}



/**
@describ 通用模块,根据功能分类sort查找itemstr的值
@sort
@itemstr
@return
*/

const char* CXMLEngine::GetStringWithString(char * sort,char *itemstr)
{
	char* ret=NULL;
	TiXmlElement* root=m_doc->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<<"在节点"<<sort<<"下,找不到节点"<<itemstr<<endl;
		}
	}
	else
	{
		cout<<"找不到数据节点"<<sort<<endl;
	}

	return ret;

}


//根据skillName获取skill数据
bool CXMLEngine::FillWithSkillData(char* skillName,skill& skilldata)
{
	bool ret=false;
	strcpy(skilldata.skillName,skillName);
	TiXmlElement* root=m_doc->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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -