Ejemplo n.º 1
0
/// 从文件加载统邮件配置
bool MailList::LoadSysMailList(const char* pFileName)
{
	Release();
	CRFile *prfile = rfOpen(pFileName);
	if(NULL == prfile)	
		return false;

	TiXmlNode *pNode = NULL;
	TiXmlDocument doc(pFileName);

	//载入技能配置文件
	doc.LoadData(prfile->GetData(), prfile->GetDatalen());
	rfClose(prfile);

	//取得第一个节点
	pNode = doc.FirstChild("Mail");	

	if (NULL == pNode)
	{
		return false;
	}

	TiXmlElement *pElem = pNode->ToElement();

	if(LoadSysMailList(pElem))
	{
		return true;	
	}
	else
	{
		return false;
	}
}
Ejemplo n.º 2
0
// 初始化,读XML配置文件
bool CChangeOccu::Init(const char *filename)
{
	if(filename)
	{
		m_vecSubOccu.clear();
		//=================================================================//
		CRFile *prfile = rfOpen(filename);
		if(NULL == prfile)
		{
			//输出错误信息
            Log4c::Error(ROOT_MODULE,"%-15s LoadFileError:%s",__FUNCTION__,filename);
			return false;
		}
		TiXmlNode *pNode = NULL; 		
		TiXmlDocument m_Tdoc(filename);
		//载入技能配置文件
		if( !m_Tdoc.LoadData(prfile->GetData(),prfile->GetDatalen()) )
		{
			//输出错误信息
			rfClose(prfile);
			return false;
		}
		rfClose(prfile);
		//=================================================================//
		//找到根节点,如果无节点,输出错误提示
		pNode = m_Tdoc.FirstChild("ChangeOccu");
		if (pNode==NULL)
		{
			return false;
		}
		//类型转换
		TiXmlElement* pElem = pNode->ToElement();
		// 便利子节点,设置属性
		for (TiXmlElement *pOccuElem=pElem->FirstChildElement(); pOccuElem!=NULL; 
			pOccuElem=pOccuElem->NextSiblingElement())
		{
			if(!strcmp(pOccuElem->Value(),"Occu")
				&& NULL!=pOccuElem->Attribute("name")
				&& NULL!=pOccuElem->Attribute("id")
				&& NULL!=pOccuElem->Attribute("parentid")
				&& NULL!=pOccuElem->Attribute("value")
				&& NULL!=pOccuElem->Attribute("goods")
				&& NULL!=pOccuElem->Attribute("goodsNum"))
			{
				tagChangeOccu stChangeOccu;
				stChangeOccu.strName		= pOccuElem->Attribute("name");
				stChangeOccu.strGoodsName	= pOccuElem->Attribute("goods");
				stChangeOccu.nID			= atoi(pOccuElem->Attribute("id"));
				stChangeOccu.nParentID		= atoi(pOccuElem->Attribute("parentid"));
				stChangeOccu.nValue			= atoi(pOccuElem->Attribute("value"));
				stChangeOccu.lGoodsNum		= atoi(pOccuElem->Attribute("goodsNum"));
				m_vecSubOccu.push_back(stChangeOccu);
			}
		}
		return true;
	}
	return false;
}
Ejemplo n.º 3
0
// 初始化,读XML配置文件
bool COccupSkillList::Init(const char *filename)
{
	if(!filename)	return false;
	Release();
	//=================================================================//
	CRFile *prfile = rfOpen(filename);
	if(NULL == prfile)
	{
		//输出错误信息
        Log4c::Error(ROOT_MODULE,"%-15s LoadFileError:%s",__FUNCTION__,filename);
		return false;
	}
	TiXmlNode *pNode = NULL; 		
	TiXmlDocument m_Tdoc(filename);
	//载入技能配置文件
	if( !m_Tdoc.LoadData(prfile->GetData(),prfile->GetDatalen()) )
	{
		//输出错误信息
        Log4c::Error(ROOT_MODULE,"%-15s %s",__FUNCTION__,FormatText("WS_SKILL_FOURTH",filename));

		rfClose(prfile);
		return false;
	}
	rfClose(prfile);
	//=================================================================//
	//找到根节点,如果无节点,输出错误提示
	pNode = m_Tdoc.FirstChild("OccupSkillList");
	if (pNode==NULL)
	{
        Log4c::Error(ROOT_MODULE,"%-15s %s",__FUNCTION__,GetText("WS_SKILL_SEVENTH"));
		return false;
	}
	//类型转换
	TiXmlElement* pElem = pNode->ToElement();
	// 便利子节点,设置属性
	for (TiXmlElement *pChildElem=pElem->FirstChildElement(); pChildElem!=NULL; 
		pChildElem=pChildElem->NextSiblingElement())
	{
		if(!strcmp(pChildElem->Value(),"Occup")
			&& NULL!=pChildElem->Attribute("name")
			&& NULL!=pChildElem->Attribute("ID"))
		{
			COccupSkill * pOccupSkill = new COccupSkill;
			pOccupSkill->SetName(pChildElem->Attribute("name"));
			pOccupSkill->SetOccupId((long)atoi(pChildElem->Attribute("ID")));
			// 职业描述
			if(NULL!=pChildElem->Attribute("Desc"))
			{
				pOccupSkill->SetDesc(pChildElem->Attribute("Desc"));
			}
			// 读每个职业的技能列表
			if(pOccupSkill->Init(pChildElem))
				m_OccupSkillList.push_back(pOccupSkill);
			// 读取职业技能列表失败
			else
			{
				delete pOccupSkill;
				pOccupSkill = NULL;
			}
		}
	}
	m_Tdoc.Clear();
	return true;
}
Ejemplo n.º 4
0
// 解析XML中关于复活物品的配置
bool CReLiveGoodsList::Init(const char *filename)
{
	if (NULL==filename)
	{
		return false;
	}
	char strError[128];
	//=================================================================//
	CRFile *prfile = rfOpen(filename);
	if(NULL == prfile)
	{
		//输出错误信息
		_snprintf(strError, 128, "LoadFileError:%s",filename);
		MessageBox(NULL,strError,"",MB_OK); 
		return false;
	}
	TiXmlNode *pNode = NULL; 		
	TiXmlDocument m_Tdoc(filename);
	//载入复活物品配置文件
	if( !m_Tdoc.LoadData(prfile->GetData(),prfile->GetDatalen()) )
	{
		//输出错误信息
		_snprintf(strError, 128, CStringReading::LoadString(IDS_WS_SKILL,STR_WS_SKILL_FOURTH),filename);
		MessageBox(NULL,strError,"",MB_OK); 
		rfClose(prfile);
		return false;
	}
	rfClose(prfile);
	//=================================================================//
	//找到根节点,如果无节点,输出错误提示
	pNode = m_Tdoc.FirstChild("Goods");
	if (pNode==NULL)
	{
		string strNode = "Goods";
		_snprintf(strError, 128, CStringReading::LoadString(IDS_WS_SKILL,STR_WS_SKILL_FIFTH),filename,strNode.c_str());
		MessageBox(NULL,strError,"",MB_OK); 
		return false;
	}
	TiXmlElement* pElem = pNode->ToElement();

	for (TiXmlElement *pChildElem=pElem->FirstChildElement(); pChildElem!=NULL; 
		pChildElem=pChildElem->NextSiblingElement())
	{

		if (!stricmp(pChildElem->Value(),"ReLiveGoods"))
		{
			tagReLiveGoods *ptgReliveGoods  = new tagReLiveGoods;
			ptgReliveGoods->strOrignalName  = pChildElem->Attribute("OrignalName");
			ptgReliveGoods->dwIndex			= (DWORD)atol(pChildElem->Attribute("Index"));
			ptgReliveGoods->dwNum			= (DWORD)atol( pChildElem->Attribute("GoodsNum"));
			ptgReliveGoods->dwRecoverRatio  = (DWORD)atol(pChildElem->Attribute("RecoverRatio"));
			m_lReLiveGoods.push_back(ptgReliveGoods);		
		}
		else if(!stricmp(pChildElem->Value(),"ExpGoods"))
		{
			tagExpGoods *ptgExpGoods = new tagExpGoods;
			string strOrgName		 = pChildElem->Attribute("OrignalName");
			ptgExpGoods->dwExpRatio  = atoi(pChildElem->Attribute("ExpRatio"));			
			if (pChildElem->Attribute("Script"))
			{
				ptgExpGoods->strScript   = pChildElem->Attribute("Script");
			}
			if (pChildElem->Attribute("Hint"))
			{
				ptgExpGoods->strHint	 = pChildElem->Attribute("Hint");
			}
			
			
			map<string,tagExpGoods*>::iterator it = m_mpExpGoods.find(strOrgName);
			if (it!=m_mpExpGoods.end())
			{
				SAFE_DELETE(ptgExpGoods);
			}
			else
			{
				m_mpExpGoods[strOrgName] = ptgExpGoods;
			}
			
		}
	}
	return true;
}
Ejemplo n.º 5
0
long   PhaseSetup::Load()
{
      Release();
      const char* rfile = "data/PhaseSetup.xml";
      CRFile* prFile = rfOpen( rfile );
      if ( prFile == NULL )
      {
          Log4c::Error(ROOT_MODULE,"%-15s %s",__FUNCTION__, "Load PhaseSetup.xml failed ");
          return  0;
      }

      TiXmlDocument doc(rfile);
      doc.LoadData( prFile->GetData() , prFile->GetDatalen() );
      rfClose( prFile );

      TiXmlElement* pRoot = doc.RootElement();
      if ( pRoot == NULL )
          return 0;

      TiXmlElement* pBaseElem = pRoot->FirstChildElement( "Base" );
      if ( pBaseElem == NULL )
      {
          Log4c::Error(ROOT_MODULE,"%-15s %s",__FUNCTION__, "Load PhaseSetup.xml Base Node failed ");
      }
      else 
      {
          XML_QUERY_NUM( "Agonal", m_config.lAgonal, pBaseElem , long );
          XML_QUERY_NUM( "HpNum", m_config.lHpNum  , pBaseElem , long );
          XML_QUERY_NUM( "DropGoodNum",m_config.lDropGoodNum,pBaseElem,long);
          XML_QUERY_NUM( "IsOpen", m_config.lIsOpen , pBaseElem , long );
      }

      TiXmlElement* pPhaseElem = pRoot->FirstChildElement("PhaseSetup");
      if ( pPhaseElem ==  NULL )
      {
          Log4c::Error(ROOT_MODULE,"%-15s %s",__FUNCTION__, "Load PhaseSetup Node Failed!" );
      }
      else 
      {   
          long   type = 0 ;
          PhaseTable  tpTemp;
          /// PlayerOper;
          TiXmlElement* pOper = pPhaseElem->FirstChildElement("PlayerOper");
          if( pOper == NULL )
          {
                Log4c::Error(ROOT_MODULE,"%-15s %s",__FUNCTION__,"Load PlayerOper Node Failed!" );
                return 0;
          } 
          XML_QUERY_NUM( "type", type , pOper, long );
          tpTemp.clear();
          for ( TiXmlElement* pEvent = pOper->FirstChildElement("Event"); pEvent != NULL ;  pEvent = pEvent->NextSiblingElement())
          {
              const char *file = NULL;
              int  id = 0;
              XML_QUERY_NUM( "id", id, pEvent, long );
              XML_QUERY_STR( "script", file, pEvent );

              tpTemp.insert( std::pair<long,std::string>( id, file) ) ;
          }
          m_PhaseTable.insert( std::pair<long,PhaseTable>(type,tpTemp) );

          /// PhaseTimeType
          TiXmlElement* TimeType= pPhaseElem->FirstChildElement("PhaseTimeType");
          if( TimeType == NULL )
          {
              Log4c::Error(ROOT_MODULE,"%-15s %s",__FUNCTION__, "Load PhaseTimeType Node Failed!" );
              return 0;
          }
          XML_QUERY_NUM( "type", type , TimeType, long );
          tpTemp.clear();
          for ( TiXmlElement* PhaseTime = TimeType->FirstChildElement("Event"); PhaseTime != NULL ;  PhaseTime = PhaseTime->NextSiblingElement())
          {
              const char *file = NULL;
              int  id = 0;
              XML_QUERY_NUM( "id", id, PhaseTime, long );
              XML_QUERY_STR( "script", file, PhaseTime );

              tpTemp.insert( std::pair<long,std::string>( id, file) ) ;
          }
          m_PhaseTable.insert( std::pair<long,PhaseTable>(type,tpTemp) );

          /// PhaseEvent
          TiXmlElement* Event= pPhaseElem->FirstChildElement("PhaseEvent");
          if( Event == NULL )
          {
             Log4c::Error(ROOT_MODULE,"%-15s %s",__FUNCTION__, "Load PhaseEvent Node Failed!" );
              return 0;
          }
          XML_QUERY_NUM( "type", type , Event, long );
          tpTemp.clear();
          for ( TiXmlElement* Ent = Event->FirstChildElement("Event"); Ent != NULL ;  Ent = Ent->NextSiblingElement())
          {
              const char *file = NULL;
              int  id = 0;
              XML_QUERY_NUM( "id", id, Ent, long );
              XML_QUERY_STR( "script", file, Ent );

              tpTemp.insert( std::pair<long,std::string>( id, file) ) ;
          }
          m_PhaseTable.insert( std::pair<long,PhaseTable>(type,tpTemp) );
      }
      return 1;
}
Ejemplo n.º 6
0
//! 读取配置
BOOL SpriteSystem::LoadSetup(void)
{
	BOOL bReturnValue = TRUE;
	//! ----------------------------根节点----------------------------
	TiXmlNode *pNode = NULL; 		
	
	CRFile* prFile = rfOpen("data/Sprite.xml");
	if (prFile == NULL)
	{
		return FALSE;
	}
	TiXmlDocument* m_Tdoc = new TiXmlDocument;

	if(!m_Tdoc->LoadData(prFile->GetData(),prFile->GetDatalen()))
		return FALSE;

	rfClose(prFile);
	pNode=m_Tdoc->FirstChild("Sprite");
	if (pNode==NULL) 
		return FALSE;

	TiXmlElement* pSprite = pNode->ToElement();//获取node 的指针
	if (pSprite==NULL) 
		return FALSE;

	//! ----------------------------获取配置----------------------------

	try
	{
		//! 自动补给物
		TiXmlElement* pAutoSupplyGoods = pSprite->FirstChildElement("AutoSupplyGoods");

		TiXmlElement* pGoods = pAutoSupplyGoods->FirstChildElement("Goods");
		for (; pGoods!=NULL; pGoods = pGoods->NextSiblingElement())
		{
			const char *pGoodsName = pGoods->Attribute("ItemName");
			LONG lGoodsBaseIndex = CGoodsFactory::QueryGoodsIDByOriginalName(pGoodsName);
			if (0 == lGoodsBaseIndex)
			{
				AddErrorLogText("读取自动补给配置失败:没有找到原始名为[%s]的物品!!!", pGoodsName);
				bReturnValue = FALSE;
				continue;
			}
			if (c_mapCanUseGoodsIndex.end() != c_mapCanUseGoodsIndex.find(lGoodsBaseIndex))
			{
				AddErrorLogText("读取自动补给配置失败:重复配置原始名为[%s]的物品!!!", pGoodsName);
				bReturnValue = FALSE;
				continue;
			}

			//! 物品应用范围
			DWORD dwBound = 0;
			const char *pBound = pGoods->Attribute("Bound");
			if (NULL == pBound)
			{
				AddErrorLogText("读取自动补给配置失败:原始名为[%s]的物品应用范围配置错误!!!", pGoodsName);
				bReturnValue = FALSE;
				continue;
			}
			LONG lBound = atoi(pBound);
			lBound = lBound % 10000;
			if(0 != lBound / 1000)	dwBound |= eGAB_POWER;
			lBound = lBound % 1000;
			if(0 != lBound / 100)	dwBound |= eGAB_SMP;
			lBound = lBound % 100;
			if(0 != lBound / 10)	dwBound |= eGAB_MP;
			lBound = lBound % 10;
			if(0 != lBound)			dwBound |= eGAB_HP;
			if(0 == dwBound)
			{
				AddErrorLogText("读取自动补给配置失败:原始名为[%s]的物品应用范围配置错误!!!", pGoodsName);
				bReturnValue = FALSE;
				continue;
			}
			
			c_mapCanUseGoodsIndex[lGoodsBaseIndex] = dwBound;
		}
        //加载战斗技能
        TiXmlElement* pAutoFightSkills = pSprite->FirstChildElement("AutoFightSkills");
        TiXmlElement* pFightSkills = pAutoFightSkills->FirstChildElement("Skills");
        for (; pFightSkills != NULL; pFightSkills = pFightSkills->NextSiblingElement("Skills"))
        {
            const char* pSkillID = pFightSkills->Attribute("ID");
            if (pSkillID == NULL)
            {
                AddErrorLogText("读取自动战斗技能配置失败:技能ID为[%s]配置错误!!!", pSkillID);
                bReturnValue = FALSE;
                continue;
            }
            LONG lID = atoi(pSkillID);
            if (FindExist(c_vectorCanUseFightSkill, lID))
            {
                AddErrorLogText("读取自动使用战斗技能配置失败:重复配置技能ID为[%s]!!!", pSkillID);
                bReturnValue = FALSE;
                continue;
            }
            c_vectorCanUseFightSkill.push_back(lID);
        }

        //加载辅助技能
        TiXmlElement* pAutoAssistSkills = pSprite->FirstChildElement("AutoAssistSkills");
        TiXmlElement* pAssistSkills = pAutoAssistSkills->FirstChildElement("Skills");
        for (; pAssistSkills != NULL; pAssistSkills = pAssistSkills->NextSiblingElement("Skills"))
        {
            const char* pSkillID = pAssistSkills->Attribute("ID");
            if (pSkillID == NULL)
            {
                AddErrorLogText("读取自动使用辅助技能配置失败:技能ID为[%s]配置错误!!!", pSkillID);
                bReturnValue = FALSE;
                continue;
            }
            LONG lAssistID = atoi(pSkillID);
            if (FindExist(c_vectorCanUseAssistSkill, lAssistID))
            {
                AddErrorLogText("读取自动使用辅助技能配置失败:重复配置技能ID为[%s]!!!", pSkillID);
                bReturnValue = FALSE;
                continue;
            }
            c_vectorCanUseAssistSkill.push_back(lAssistID);
        }
        //加载辅助道具
        TiXmlElement* pAutoAssistGoods = pSprite->FirstChildElement("AutoAssistGoods");
        TiXmlElement* pAssistGoods = pAutoAssistGoods->FirstChildElement("Goods");
        for (; pAssistGoods != NULL; pAssistGoods = pAssistGoods->NextSiblingElement("Goods"))
        {
            const char* pGoodsName = pAssistGoods->Attribute("ItemName");
            LONG lGoodsBaseIndex = CGoodsFactory::QueryGoodsIDByOriginalName(pGoodsName);
            if (lGoodsBaseIndex == 0)
            {
                AddErrorLogText("读取自动使用辅助道具配置失败:没有找到原始名为[%s]的物品道具!!!", pGoodsName);
                bReturnValue = FALSE;
                continue;
            }
            if (FindExist(c_vectorCanUseAssistGoods, lGoodsBaseIndex))
            {
                AddErrorLogText("读取自动使用辅助道具配置失败:重复配置原始名为[%s]的物品!!!", pGoodsName);
                bReturnValue = FALSE;
                continue;
            }
            c_vectorCanUseAssistGoods.push_back(lGoodsBaseIndex);
        }
	}
	catch (...)
	{
		AddErrorLogText("在读取小精灵配置的时候发生了错误,读取失败,可能的原因是配置不当。");
		if (NULL != m_Tdoc)
		{
			delete m_Tdoc;
			m_Tdoc = NULL;
		}
		return FALSE;
	}


	//! ----------------------------清除对象----------------------------
	delete m_Tdoc;
	m_Tdoc = NULL;
	return bReturnValue;
}
Ejemplo n.º 7
0
	bool CConfiger::LoadShopList( const char *file )
	{
		CRFile *prfile = rfOpen( file );
		if( prfile == NULL )
		{
			PutoutLog( LOG_FILE, LT_ERROR, "Load file %s failed.", file );
			return false;
		}

		TiXmlDocument doc;
		if( !doc.LoadData( prfile->GetData(), prfile->GetDatalen() ) )
		{
			PutoutLog( LOG_FILE, LT_ERROR, "Parse %s failed, invalid xml format.", file );
			rfClose( prfile );
			return false;
		}
		rfClose( prfile );
		TiXmlElement *root = doc.RootElement();
		{
			// global config
			TiXmlElement *node = root->FirstChildElement( "Global" );
			QUERY_NUM( "goods_update_interval", m_GlobalCfg.uGoodsUpdateInter, node, unsigned long );
			QUERY_NUM( "buy_count", m_GlobalCfg.lBuyCount, node, long );
			QUERY_NUM( "enable", m_GlobalCfg.lEnable, node, long );
			QUERY_NUM( "player_buy_count", m_GlobalCfg.lPlayerBuyCount, node, long );

			char strCoinGoods[64];
			QUERY_STR( "coin_goods", strCoinGoods, node );
			m_GlobalCfg.lCoinGoodsIndex = CGoodsFactory::QueryGoodsIDByOriginalName( strCoinGoods );
		}
		{
			// shop list
			TiXmlElement *shoplist_node = root->FirstChildElement( "ShopList" );
			for( TiXmlElement *shop_node = shoplist_node->FirstChildElement();
				shop_node != NULL; shop_node = shop_node->NextSiblingElement() )
			{
				long id;
				QUERY_NUM( "id", id, shop_node, long );
				if( m_ShopTable.find( id ) != m_ShopTable.end() )
				{
					// more than 1 shop with the same id, ignore it.
					PutoutLog( LOG_FILE, LT_WARNING, "More than 1 shop with the same id [%d].", id );
					continue;
				}
				Shop shop;
				QUERY_STR( "npc_orig_name", shop.npcOrigName, shop_node );
				SellGoodsListT *pSellGoodsList = new SellGoodsListT();
				shop.SellList = pSellGoodsList;
				for( TiXmlElement *goods_node = shop_node->FirstChildElement();
					goods_node != NULL; goods_node = goods_node->NextSiblingElement() )
				{
					SellGoods goods;
					char strOrigName[64];
					QUERY_STR( "orig_name", strOrigName, goods_node );
					goods.lIndex = CGoodsFactory::QueryGoodsIDByOriginalName( strOrigName );
					pSellGoodsList->push_back( goods );
				}
				m_ShopTable.insert( std::make_pair( id, shop ) );
			}
		}
		return true;
	}