KAILogic* KAIManager::CreateAI(int nType, DWORD dwScriptID) { KAILogic* pResult = NULL; BOOL bRetCode = false; KAILogic* pAI = NULL; pAI = KMEMORY_NEW(KAILogic); KGLOG_PROCESS_ERROR(pAI); bRetCode = pAI->Setup(nType, dwScriptID); KGLOG_PROCESS_ERROR(bRetCode); pResult = pAI; Exit0: if (!pResult) { if (pAI) { KMemory::Delete(pAI); pAI = NULL; } KGLogPrintf(KGLOG_ERR, "[AI] Setup AI failed, AIType: %d", nType); } return pResult; }
IPath* KComplexPath::GetClone() const { KCOMPLEX_SUB_PATHS::const_iterator itPaths; KComplexPath* pResult = NULL; KComplexPath* pClone = NULL; pClone = KMEMORY_NEW(KComplexPath); KGLOG_PROCESS_ERROR(pClone); pClone->m_cStart = m_cStart; pClone->m_cEnd = m_cEnd; pClone->m_nStartFrame = m_nStartFrame; pClone->m_nTotalFrame = m_nTotalFrame; for (itPaths = m_cSubPaths.begin(); itPaths != m_cSubPaths.end(); ++itPaths) { IPath* pSubPath = (*itPaths)->GetClone(); KGLOG_PROCESS_ERROR(pSubPath); pClone->m_cSubPaths.push_back(pSubPath); } pResult = pClone; Exit0: return pResult; }
BOOL KStatDataServer::Update(const char szName[], int64_t nValue) { BOOL bResult = false; size_t uNameLen = 0; KStatData* pStatData = NULL; KDATA_TABLE::iterator it; std::pair<KDATA_TABLE::iterator, BOOL> InsRet; uNameLen = strlen(szName) + 1; KGLOG_PROCESS_ERROR(uNameLen <= STAT_DATA_NAME_LEN); it = m_DataTable.find((char*)szName); if (it == m_DataTable.end()) { pStatData = KMEMORY_NEW(KStatData); KGLOG_PROCESS_ERROR(pStatData); strncpy(pStatData->m_szName, szName, sizeof(pStatData->m_szName)); pStatData->m_szName[sizeof(pStatData->m_szName) - 1] = '\0'; InsRet = m_DataTable.insert(std::make_pair(pStatData->m_szName, pStatData)); KGLOG_PROCESS_ERROR(InsRet.second); it = InsRet.first; } pStatData = it->second; pStatData->m_nValue += nValue; if (pStatData->m_nID == 0) { m_Name2IDQueue.insert(szName); } else { // 只有已获得ID的数据才放入m_DataList中 if (!pStatData->m_bInList) { // 不在队列里说明是已发送过的数据,此次再次修改 m_DataList.push_back(pStatData); pStatData->m_bInList = true; } } bResult = true; Exit0: return bResult; }
BOOL KActiveSettings::LoadData() { BOOL bResult = false; BOOL bRetCode = false; int nHeight = 0; int nEvent = 0; DWORD dwID = ERROR_ID; DWORD dwNextID = 1; ITabFile* piTabFile = NULL; char szEvent[64] = {0}; KActiveSettingsItem* pActiveInfo = NULL; KVEC_ACTIVE_UPDATOR* pvecActive = NULL; KMAP_ACTIVE_UPDATOR::iterator it; piTabFile = g_OpenTabFile(SETTING_DIR"/ActivePlayer.tab"); KGLOG_PROCESS_ERROR(piTabFile); nHeight = piTabFile->GetHeight(); m_vecActive.resize(nHeight - 1); for(int nRow = 2; nRow <= nHeight; ++nRow) { bRetCode = piTabFile->GetInteger(nRow, "ID", 0, (int*)&dwID); KGLOG_PROCESS_ERROR(bRetCode > 0); KGLOG_PROCESS_ERROR(dwID == dwNextID); ++dwNextID; pActiveInfo = &m_vecActive[dwID - 1]; pActiveInfo->dwID = dwID; szEvent[0] = '\0'; bRetCode = piTabFile->GetString(nRow, "Event", "peInvalid", szEvent, sizeof(szEvent)); KGLOG_PROCESS_ERROR(bRetCode); bRetCode = ENUM_STR2INT(PLAYER_EVENT_TYPE, szEvent, pActiveInfo->nEvent); KGLOG_PROCESS_ERROR(bRetCode); bRetCode = piTabFile->GetInteger(nRow, "FinishValue", 0, (int*)&(pActiveInfo->nFininshValue)); KGLOG_PROCESS_ERROR(bRetCode > 0); bRetCode = piTabFile->GetInteger(nRow, "UnLimitCount", 0, (BOOL*)&(pActiveInfo->bUnLimit)); KGLOG_PROCESS_ERROR(bRetCode > 0); bRetCode = piTabFile->GetInteger(nRow, "ActivePoint", 0, (int*)&(pActiveInfo->nAwardActive)); KGLOG_PROCESS_ERROR(bRetCode > 0); it = m_mapValueUpdator.find(pActiveInfo->nEvent); if (it == m_mapValueUpdator.end()) { pvecActive = KMEMORY_NEW(KVEC_ACTIVE_UPDATOR); m_mapValueUpdator[pActiveInfo->nEvent] = pvecActive; } else { pvecActive = it->second; } pvecActive->push_back(dwID); pvecActive = NULL; } Exit1: bResult = true; Exit0: KG_COM_RELEASE(piTabFile); return bResult; }