BOOL KScriptManager::IsScriptExist(const char cszScriptName[]) { BOOL bResult = false; DWORD dwScriptID = 0; assert(cszScriptName); dwScriptID = g_FileNameHash(cszScriptName); bResult = IsScriptExist(dwScriptID); KG_PROCESS_ERROR(bResult); bResult = true; Exit0: return bResult; }
BOOL KScriptManager::Init() { BOOL bResult = false; BOOL bRetCode = false; bRetCode = Load(); KGLOG_PROCESS_ERROR(bRetCode); bRetCode = IsScriptExist(m_dwMainScriptID); KG_PROCESS_ERROR(bRetCode); bRetCode = IsFuncExist(m_dwMainScriptID, MAIN_SCRIPT_ACTIVATE_FUNCTION); KG_PROCESS_ERROR(bRetCode); bResult = true; Exit0: return bResult; }
BOOL KScriptManager::Reload(const char* pszFileName) { BOOL bResult = false; BOOL bRetCode = false; IFile* piFile = NULL; char* pszBuffer = NULL; DWORD dwScriptID = 0; DWORD dwFileSize = 0; DWORD dwReadSize = 0; KLuaScriptData* pScriptData = NULL; char szPathName[MAX_PATH]; char szFileName[MAX_PATH]; assert(pszFileName); piFile = g_OpenFile(pszFileName); KG_PROCESS_ERROR(piFile); dwFileSize = piFile->Size(); pszBuffer = new char[dwFileSize]; KG_PROCESS_ERROR(pszBuffer); dwReadSize = piFile->Read(pszBuffer, dwFileSize); KG_PROCESS_ERROR(dwReadSize == dwFileSize); g_GetFullPath(szPathName, pszFileName); bRetCode = g_GetFilePathFromFullPath(szFileName, szPathName); KG_PROCESS_ERROR(bRetCode); dwScriptID = g_FileNameHash(szFileName); bRetCode = IsScriptExist(dwScriptID); KG_PROCESS_ERROR(bRetCode); bRetCode = m_piScript->LoadFromBuffer(dwScriptID, szPathName, pszBuffer, dwFileSize); KG_PROCESS_ERROR(bRetCode); pScriptData = m_piScript->GetScriptData(dwScriptID); if (pScriptData) { std::vector<DWORD>::iterator it = pScriptData->vecIncludeScriptID.begin(); std::vector<DWORD>::iterator itEnd = pScriptData->vecIncludeScriptID.end(); for (NULL; it != itEnd; ++it) { KLuaScriptData* pNewScriptData = NULL; pNewScriptData = m_piScript->GetScriptData(*it); if (pNewScriptData) Reload(pNewScriptData->szName); } } bResult = true; Exit0: if (!bResult) { KGLogPrintf(KGLOG_ERR, "[Lua] Failed to reload file \"%s\" !\n", pszFileName); } KG_DELETE_ARRAY(pszBuffer); KG_COM_RELEASE(piFile); return bResult; }