Beispiel #1
0
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;
}
Beispiel #3
0
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;
}
Beispiel #4
0
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;
}