//------------------------------------------------------------------------------ // uiQuestListContent.cpp // (C) 2005 SUN ONLINE //------------------------------------------------------------------------------ #include "stdafx.h" #include #include "util/util.h" #include "QuestEx.h" #include #include #include "CSunOnline.h" #include "logic.h" #include "SCItemSlot.h" #include "uiQuestListContent.h" #pragma warning (disable:4786 4244 4101) #include #include using namespace std; #include "../lib/XMLParser/MarkupArchive.h" using namespace markup; extern QuestInfoManager2* g_pQuestInfoManager; uiQuestListContent::uiQuestListContent() { } uiQuestListContent::~uiQuestListContent() { this->ClearInfo(); } //initInfo(); //UpdateQuestInfo(); void uiQuestListContent::ClearInfo() { // ÃʱâÈ­ QUEST_GROUP_ITR itr = m_QuestGroup.begin(); while (itr != m_QuestGroup.end()) { itr->second.clear(); ++itr; } m_QuestGroup.clear(); } DWORD uiQuestListContent::CompileQuestStream(BSTR bstrXml, BYTE* ProgrQStream, BYTE* ComplQStream) { USES_CONVERSION; std::string tmpStr; ConvertBSTRToString(bstrXml,tmpStr); CMarkupArchive xml(CMarkupArchive::ArchiveModeNotZipped | CMarkupArchive::ArchiveModeString); xml.OpenString(tmpStr.c_str()); ////////////////////////////////////// QUESTPART_PROGR* pProgrQuest = (QUESTPART_PROGR*)ProgrQStream; QUESTPART_COMPL* pComplQuest = (QUESTPART_COMPL*)ComplQStream; int nQuestOffSet =0; CHECK(xml.FindElem(_T("QuestList")),"QuestList"); int nIndex = 0; while(TRUE) { std::string str; if(!xml.FindChildElem(_T("Quest")) ) break; xml.IntoElem(); DWORD QCode = 0; CHECK(xml.FindGetChildData(_T("Code"), QCode) ,"Code"); DWORD dwExpireTime = 0; CHECK(xml.FindGetChildData(_T("ExpireTime"), dwExpireTime),"ExpireTime"); DWORD QState = 0; CHECK(xml.FindGetChildData(_T("State"), QState),"State"); DWORD dwNum = 0; CHECK(xml.FindGetChildData(_T("Num"), dwNum) ,"Num"); if(dwNum > 0 ) { pComplQuest[QCode].m_Num = dwNum; } else { pProgrQuest[nQuestOffSet].m_QCode = QCode; pProgrQuest[nQuestOffSet].m_ExpireTime =dwExpireTime; pProgrQuest[nQuestOffSet].m_QState = QState; //Äù½ºÆ®¿¡¼­ ¸÷Àâ´Â ¼öÄ¡ Ç¥½Ã 2009-11-17 ¹®»óÇö char sMonTag[64]; for(int j = 0 ; j < /*QUESTPART_PROGR_V1::MAX_QUEST_MONSTER_KILL_COUNT*/5 ; j++) { Sprintf(sMonTag,"KillMonster%d",j); CHECK(xml.FindGetChildData(sMonTag, dwNum),sMonTag ); pProgrQuest[nQuestOffSet].m_KCount[j] = (BYTE)dwNum; } nQuestOffSet++; #ifdef __NA_001337_20090511_EXPANSION_QUEST_COMPL_NUM if(nQuestOffSet >= QUESTPART_PROGR::MAX_QUEST_PROGR_NUM) #else if(nQuestOffSet >= MAX_QUEST_PROGR_NUM) #endif { xml.OutOfElem(); return GM_ERROR_MAX_QUEST; } } xml.OutOfElem(); } return GM_SUCCEEDED; } //------------------------------------------------------------------------------------------- /** */ //void //uiQuestListContent::UpdateQuestInfo(QuestManager2* pQuestMgr, BSTR* bstrXml) void uiQuestListContent::DecompileQuestInfo(BYTE * ProgrQStream, BYTE * ComplQStream, BSTR* bstrXml) { CMarkupArchive xml(CMarkupArchive::ArchiveModeCreate | CMarkupArchive::ArchiveModeStoring | CMarkupArchive::ArchiveModeNotZipped); SetXMLCharSet(xml); xml.Open("C:\\WOPSConfig\\SUNGMS\\decodeQuestList.xml"); xml.AddElem(_T("QuestList")); TCHAR pszCategoryName [256] = {0}; TCHAR pszName[256] = {0}; TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0}; QUESTPART_PROGR * pProgrQStream = reinterpret_cast(ProgrQStream); //////////////////////// // Äù½ºÆ® ÁøÇà ¸ñ·Ï(ÁøÇà,¿Ï·á,½ÇÆÐ) #ifdef __NA_001337_20090511_EXPANSION_QUEST_COMPL_NUM for( int i = 0 ; i < QUESTPART_PROGR::MAX_QUEST_PROGR_NUM ; ++i ) #else for( int i = 0 ; i < MAX_QUEST_PROGR_NUM ; ++i ) #endif { if( 0 != pProgrQStream[i].m_QCode ) { // ÁøÇàÁßÀÎ Äù½ºÆ® //pProgrQStream[i].m_QState //< Äù½ºÆ® »óÅ //pProgrQStream[i].m_ExpireTime //< Äù½ºÆ® ¿Ï·á Á¦Çѽð£ //pProgrQStream[i].m_QCode // pProgrQStream[i].m_KCount[MAX_QUEST_MONSTER_KILL_COUNT]; QuestInfo* pQuestInfo = g_pQuestInfoManager->FindQuestInfo(pProgrQStream[i].m_QCode); if(!pQuestInfo) continue; GetStringByCode(pQuestInfo->GetGroupCode(), pszCategoryName,256); GetStringByCode(pQuestInfo->GetQNCode(), pszName,256); switch ( pProgrQStream[i].m_QState ) { case QS_COMPLETED: { // (¿Ï·á) ( 9051 ) GetStringByCode(9051, szMessage,256); _tcscat(pszName, szMessage); } break; case QS_FAILED: { // (½ÇÆÐ) ( 9052 ) GetStringByCode(9052, szMessage,256); _tcscat(pszName, szMessage ); } break; case QS_NORMAL: { } default: break; } xml.AddChildElem(_T("Quest")); xml.IntoElem(); xml.AddChildElem(_T("Name"), pszName); xml.AddChildElem(_T("Category"), pszCategoryName); xml.AddChildElemEx(_T("Code"), pProgrQStream[i].m_QCode ); xml.AddChildElemEx(_T("ExpireTime"), pProgrQStream[i].m_ExpireTime ); xml.AddChildElemEx(_T("State"), pProgrQStream[i].m_QState ); xml.AddChildElemEx(_T("Num"), 0 ); #ifdef _NA_003027_20111013_HONOR_SYSTEM xml.AddChildElemEx(_T("IsDailyQuest"), pQuestInfo->IsDailyQuest() ? 1 : 0); xml.AddChildElemEx(_T("GroupCode"), pQuestInfo->GetSquadCode()); #endif //Äù½ºÆ®¿¡¼­ ¸÷Àâ´Â ¼öÄ¡ Ç¥½Ã 2009-11-17 ¹®»óÇö char sMonTag[64]; for(int j = 0 ; j < /*QUESTPART_PROGR_V1::MAX_QUEST_MONSTER_KILL_COUNT*/5 ; j++) { Sprintf(sMonTag,"KillMonster%d",j); xml.AddChildElemEx(sMonTag, pProgrQStream[i].m_KCount[j] ); } xml.OutOfElem(); } } QUESTPART_COMPL * pComplQStream = reinterpret_cast(ComplQStream); //////////////////////// // Äù½ºÆ® ¿Ï·á ¸ñ·Ï #ifdef __NA_001337_20090511_EXPANSION_QUEST_COMPL_NUM for( int QCode = 0 ; QCode < QUESTPART_COMPL::MAX_QUEST_COMPL_NUM ; ++QCode ) #else for( int QCode = 0 ; QCode < MAX_QUEST_COMPL_NUM ; ++QCode ) #endif { if( pComplQStream[QCode].m_Num > 0 ) { // ¿Ï·áÇÑ Äù½ºÆ®, ¿Ï·áÇÑ È½¼ö(0 ~255) // QCode, pComplQStream[i].m_Num QuestInfo* pQuestInfo = g_pQuestInfoManager->FindQuestInfo(QCode); if(!pQuestInfo) continue; GetStringByCode(pQuestInfo->GetGroupCode(), pszCategoryName,256); GetStringByCode(pQuestInfo->GetQNCode(), pszName,256); // (¿Ï·á) ( 9051 ) GetStringByCode(9051, szMessage,256); _tcscat(pszName, szMessage); xml.AddChildElem(_T("Quest")); xml.IntoElem(); xml.AddChildElem(_T("Name"), pszName); xml.AddChildElem(_T("Category"), pszCategoryName); xml.AddChildElemEx(_T("Code"), QCode ); xml.AddChildElemEx(_T("ExpireTime"), 0 ); xml.AddChildElemEx(_T("State"), QS_COMPLETED ); xml.AddChildElemEx(_T("Num"), pComplQStream[QCode].m_Num ); #ifdef _NA_003027_20111013_HONOR_SYSTEM xml.AddChildElemEx(_T("IsDailyQuest"), pQuestInfo->IsDailyQuest() ? 1 : 0); xml.AddChildElemEx(_T("GroupCode"), pQuestInfo->GetSquadCode()); #endif xml.OutOfElem(); } } ////////////////// /* QuestManager2* pQuestMgr = new QuestManager2( g_pQuestInfoManager); pQuestMgr->SerializeProgrStream( ProgrQStream, MAX_PROGR_QUESTSTREAM_SIZE, QSERIALIZE_SAVE ); pQuestMgr->SerializeComplStream( ComplQStream, MAX_COMPL_QUESTSTREAM_SIZE, QSERIALIZE_SAVE ); uiQuestListContent QuestList; QuestList.UpdateQuestInfo(pQuestMgr, bstrXml); delete pQuestMgr; */ ////////////////// // MissionManager missionMgr; // missionMgr.SerializeStream(Mission, MAX_MISSIONSTREAM_SIZE, SERIALIZE_STORE); // // uiQuestMissionList MissionList; // MissionList.UpdateMissionInfo(&missionMgr, bstrXml); *bstrXml = _bstr_t(xml.GetDoc().c_str() ).copy(); xml.Close(); }