BOOL KQuestInfoList::LoadRandomQuestGroup() { BOOL bResult = false; int nRetCode = false; int nHeight = 0; ITabFile* piTabFile = NULL; DWORD dwTemplateID = 0; DWORD dwQuestID = 0; KQuestInfo* pQuestInfo = NULL; char szFilePath[MAX_PATH]; char szColName[64]; std::set<DWORD>::iterator setIt; int nID = 0; nRetCode = (int)snprintf(szFilePath, sizeof(szFilePath), "%s/%s", SETTING_DIR, RANDOM_QUEST_FILE_NAME); KGLOG_PROCESS_ERROR(nRetCode > 0 && nRetCode < (int)sizeof(szFilePath)); piTabFile = g_OpenTabFile(szFilePath); KGLOG_PROCESS_ERROR(piTabFile); nHeight = piTabFile->GetHeight(); if (nHeight >= 2) { for (int i = 2; i <= nHeight; ++i) { KQUEST_GROUP QuestGroupInfo; nRetCode = piTabFile->GetInteger(i, "ID", 0, &nID); KGLOG_PROCESS_ERROR(nRetCode > 0); for (int j = 0; j < RANDOM_QUEST_COUNT_PER_GROUP; ++j) { snprintf(szColName, sizeof(szColName), "Quest%d", j + 1); szColName[sizeof(szColName) - 1] = '\0'; nRetCode = piTabFile->GetInteger(i, szColName, 0, (int*)&dwQuestID); if (dwQuestID == 0) break; pQuestInfo = GetQuestInfo(dwQuestID); KGLOG_PROCESS_ERROR(pQuestInfo); KGLOG_PROCESS_ERROR(pQuestInfo->bAccept); KGLOG_PROCESS_ERROR(pQuestInfo->bRepeat); QuestGroupInfo.push_back(dwQuestID); } m_RandomQuestGroup[nID] = QuestGroupInfo; } } Exit1: bResult = true; Exit0: KG_COM_RELEASE(piTabFile); return bResult; }
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; }
void ObjectMgr::LoadQuests() { sQuestsStorage.Load (); // create multimap previous quest for each existed quest // some quests can have many previous maps setted by NextQuestId in previouse quest // for example set of race quests can lead to single not race specific quest for(uint32 i = 1; i < sQuestsStorage.MaxEntry; ++i ) { QuestInfo const* qinfo = GetQuestInfo(i); if(!qinfo) continue; if(qinfo->PrevQuestId ) sPrevQuests.insert(QuestRelations::value_type(qinfo->QuestId,qinfo->PrevQuestId)); if(qinfo->NextQuestId ) sPrevQuests.insert(QuestRelations::value_type(qinfo->NextQuestId,qinfo->QuestId)); }; sLog.outString( ">> Loaded %u quests definitions", sQuestsStorage.RecordCount ); sLog.outString( "" ); }