📄 xmlengine.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 + -