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;
}
Exemple #3
0
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( "" );
}