BOOL KQuestInfoList::Reload() { BOOL bResult = false; int nRetCode = false; int nHeight = 0; ITabFile* piTabFile = NULL; char szFilePath[MAX_PATH]; DWORD dwQuestID = 0; KQuestInfo* pQuestInfo = NULL; nRetCode = (int)snprintf(szFilePath, sizeof(szFilePath), "%s/%s", SETTING_DIR, QUEST_FILE_NAME); KGLOG_PROCESS_ERROR(nRetCode > 0 && nRetCode < (int)sizeof(szFilePath)); piTabFile = g_OpenTabFile(szFilePath); KGLOG_PROCESS_ERROR(piTabFile); nHeight = piTabFile->GetHeight(); KGLOG_PROCESS_ERROR(nHeight > 1); nRetCode = LoadQuestInfo(piTabFile, 2, &m_DefaultQuestInfo); KGLOG_PROCESS_ERROR(nRetCode); m_DailyQuest.clear(); m_RandomQuestGroup.clear(); for (int nIndex = 3; nIndex <= nHeight; nIndex++) { KQuestInfo TempQuestInfo; nRetCode = piTabFile->GetInteger(nIndex, "QuestID", m_DefaultQuestInfo.dwQuestID, (int*)&dwQuestID); KGLOG_PROCESS_ERROR(nRetCode); KGLOG_PROCESS_ERROR(dwQuestID < MAX_QUEST_COUNT); pQuestInfo = GetQuestInfo(dwQuestID); if (pQuestInfo == NULL) pQuestInfo = &TempQuestInfo; nRetCode = LoadQuestInfo(piTabFile, nIndex, pQuestInfo); KGLOG_PROCESS_ERROR(nRetCode); m_mapID2QuestInfo[dwQuestID] = *pQuestInfo; if (pQuestInfo->bDaily) m_DailyQuest.push_back(pQuestInfo->dwQuestID); } nRetCode = LoadRandomQuestGroup(); KGLOG_PROCESS_ERROR(nRetCode); bResult = true; Exit0: KG_COM_RELEASE(piTabFile); return bResult; }
BOOL KQuestInfoList::Init(void) { BOOL bResult = false; int nRetCode = false; int nHeight = 0; ITabFile* piTabFile = NULL; char szFilePath[MAX_PATH]; std::pair<MAP_ID_2_QUEST_INFO::iterator, bool> InsRet; nRetCode = (int)snprintf(szFilePath, sizeof(szFilePath), "%s/%s", SETTING_DIR, QUEST_FILE_NAME); KGLOG_PROCESS_ERROR(nRetCode > 0 && nRetCode < (int)sizeof(szFilePath)); piTabFile = g_OpenTabFile(szFilePath); KGLOG_PROCESS_ERROR(piTabFile); nHeight = piTabFile->GetHeight(); KGLOG_PROCESS_ERROR(nHeight > 1); memset(&m_DefaultQuestInfo, 0, sizeof(m_DefaultQuestInfo)); nRetCode = LoadQuestInfo(piTabFile, 2, &m_DefaultQuestInfo); KGLOG_PROCESS_ERROR(nRetCode); for (int nIndex = 3; nIndex <= nHeight; nIndex++) { KQuestInfo TempQuestInfo; nRetCode = LoadQuestInfo(piTabFile, nIndex, &TempQuestInfo); KGLOG_PROCESS_ERROR(nRetCode); nRetCode = MakeQuestMap(&TempQuestInfo); KGLOG_PROCESS_ERROR(nRetCode); #ifdef _SERVER InsRet = m_mapID2QuestInfo.insert(std::make_pair(TempQuestInfo.dwQuestID, TempQuestInfo)); KGLOG_PROCESS_ERROR(InsRet.second); #endif } bResult = true; Exit0: KG_COM_RELEASE(piTabFile); return bResult; }
BOOL KQuestInfoList::LoadQuestInfoByID(ITabFile* piTabFile, DWORD dwQuestID, KQuestInfo* pQuestInfo) { BOOL bResult = false; BOOL bRetCode = false; int nIndex = 0; char szRowName[MAX_PATH]; assert(piTabFile); assert(pQuestInfo); snprintf(szRowName, sizeof(szRowName), "%lu", dwQuestID); szRowName[sizeof(szRowName) - 1] = '\0'; nIndex = piTabFile->FindRow(szRowName); KGLOG_PROCESS_ERROR(nIndex > 1); // 寻找到的信息肯定是在2行之后。 bRetCode = LoadQuestInfo(piTabFile, nIndex, pQuestInfo); KGLOG_PROCESS_ERROR(bRetCode); bResult = true; Exit0: return bResult; }