BOOL KScriptServer::Accept(KPlayer* pPlayer, const char cszFunction[], BYTE* pbyData, size_t uDataLen) { BOOL bResult = false; BOOL bRetCode = false; int nRetCode = 0; int nIndex = 0; ILuaScriptEx* piScript = NULL; Lua_State* L = NULL; BYTE* pbyNext = NULL; BYTE* pbyTail = NULL; size_t uSrcLen = sizeof(m_byOriginalBuffer); assert(pPlayer); assert(pPlayer->m_pScene); g_pSO3World->m_ScriptCenter.SafeCallBegin(&nIndex); nRetCode = lzo1x_decompress(pbyData, (lzo_uint)uDataLen, m_byOriginalBuffer, (lzo_uint*)&uSrcLen, NULL); KGLOG_PROCESS_ERROR(nRetCode == LZO_E_OK); pbyNext = m_byOriginalBuffer; pbyTail = m_byOriginalBuffer + uSrcLen; bRetCode = g_pSO3World->m_ScriptCenter.IsScriptExist(m_dwScript); KG_PROCESS_ERROR(bRetCode); bRetCode = g_pSO3World->m_ScriptCenter.IsFuncExist(m_dwScript, cszFunction); KG_PROCESS_ERROR(bRetCode); piScript = g_pSO3World->m_ScriptCenter.GetScriptHolder(); KGLOG_PROCESS_ERROR(piScript); L = piScript->GetLuaState(); KGLOG_PROCESS_ERROR(L); pPlayer->LuaGetObj(L); piScript->AddParamCount(); while (pbyNext < pbyTail) { pbyNext = LuaUnpack(L, pbyNext, (size_t)(pbyTail - pbyNext)); KGLOG_PROCESS_ERROR(pbyNext); piScript->AddParamCount(); } g_pSO3World->m_ScriptCenter.CallFunction(m_dwScript, cszFunction, 0); bResult = true; Exit0: g_pSO3World->m_ScriptCenter.SafeCallEnd(nIndex); return bResult; }
BOOL KScriptManager::Load() { BOOL bResult = false; BOOL bRetCode = false; ILuaScriptEx* piScript = NULL; lua_State* pLuaState = NULL; piScript = CreateLuaInterface(&KMemory::LuaAllocator, NULL); KGLOG_PROCESS_ERROR(piScript); bRetCode = RegisterScriptFunctions(piScript); KGLOG_PROCESS_ERROR(bRetCode); piScript->RegisterConstList(g_LuaServerConstList); pLuaState = piScript->GetLuaState(); KGLOG_PROCESS_ERROR(pLuaState); Luna<KScene>::Register(pLuaState); Luna<KHero>::Register(pLuaState); Luna<KPlayer>::Register(pLuaState); Luna<KAILogic>::Register(pLuaState); Luna<KAIState>::Register(pLuaState); Luna<KAIAction>::Register(pLuaState); Luna<KGItem>::Register(pLuaState); Luna<KGLuaItemInfo>::Register(pLuaState); Luna<KBall>::Register(pLuaState); bRetCode = LoadScripts(piScript, SERVER_SCRIPTS_DIR); KGLOG_PROCESS_ERROR(bRetCode); lua_gc(piScript->GetLuaState(), LUA_GCRESTART, 0); lua_gc(piScript->GetLuaState(), LUA_GCSETPAUSE, 100); lua_gc(piScript->GetLuaState(), LUA_GCSETSTEPMUL, 150); KG_COM_RELEASE(m_piScript); m_piScript = piScript; piScript = NULL; bResult = true; Exit0: KG_COM_RELEASE(piScript); return bResult; }
BOOL KScriptClient::Accept(const char cszFunction[], BYTE* pbyData, size_t uDataLen) { BOOL bResult = false; BOOL bRetCode = false; int nIndex = 0; ILuaScriptEx* piScript = NULL; Lua_State* L = NULL; BYTE* pbyNext = pbyData; BYTE* pbyTail = pbyData + uDataLen; g_pSO3World->m_ScriptCenter.SafeCallBegin(&nIndex); bRetCode = g_pSO3World->m_ScriptCenter.IsScriptExist(m_dwScript); KG_PROCESS_ERROR(bRetCode); bRetCode = g_pSO3World->m_ScriptCenter.IsFuncExist(m_dwScript, cszFunction); KG_PROCESS_ERROR(bRetCode); piScript = g_pSO3World->m_ScriptCenter.GetScriptHolder(); KGLOG_PROCESS_ERROR(piScript); L = piScript->GetLuaState(); KGLOG_PROCESS_ERROR(L); while (pbyNext < pbyTail) { pbyNext = LuaUnpack(L, pbyNext, (size_t)(pbyTail - pbyNext)); KGLOG_PROCESS_ERROR(pbyNext); piScript->AddParamCount(); } g_pSO3World->m_ScriptCenter.CallFunction(m_dwScript, cszFunction, 0); bResult = true; Exit0: g_pSO3World->m_ScriptCenter.SafeCallEnd(nIndex); return bResult; }
BOOL KScriptManager::Load() { BOOL bResult = false; BOOL bRetCode = false; ILuaScriptEx* piScript = NULL; piScript = CreateLuaInterface(&KMemory::LuaAllocator, NULL); KGLOG_PROCESS_ERROR(piScript); bRetCode = RegisterScriptFunctions(piScript); KGLOG_PROCESS_ERROR(bRetCode); piScript->RegisterConstList(g_LuaCenterConstList); Luna<KGPQ>::Register(piScript->GetLuaState()); Luna<KGlobalCustomDataManager>::Register(piScript->GetLuaState()); Luna<KGlobalSystemValueManager>::Register(piScript->GetLuaState()); Luna<KRole>::Register(piScript->GetLuaState()); Luna<KTong>::Register(piScript->GetLuaState()); Luna<KActivityManager>::Register(piScript->GetLuaState()); Luna<KMentorCenter>::Register(piScript->GetLuaState()); Luna<KMapInfo>::Register(piScript->GetLuaState()); Luna<KMapCopy>::Register(piScript->GetLuaState()); bRetCode = LoadScripts(piScript, CENTER_SCRIPTS_DIR); KGLOG_PROCESS_ERROR(bRetCode); lua_gc(piScript->GetLuaState(), LUA_GCRESTART, 0); lua_gc(piScript->GetLuaState(), LUA_GCSETPAUSE, 100); lua_gc(piScript->GetLuaState(), LUA_GCSETSTEPMUL, 150); KG_COM_RELEASE(m_piScript); m_piScript = piScript; piScript = NULL; bResult = true; Exit0: KG_COM_RELEASE(piScript); return bResult; }