• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

LuaScriptInterface

Oskar1121

Excellent OT User
Joined
Jul 15, 2009
Messages
634
Reaction score
537
Location
Poland
Pytanie do wyjadaczy Cpp. Wysyłam z OTC pakiet z jedną stałą:
PHP:
void ProtocolGame::parseMessageChoose(NetworkMessage& msg)
{
    const std::string text = msg.GetString();
    g_game.playerSendRequestMessage(player, text);
}
W game.cpp przesyłam ją do najbliżej stojących NPCtów i przechodzi dalej do npc.cpp:
PHP:
void NpcScript::onSendMessageRequest(const Player* player, const std::string& message)
{
    if(m_onSendMessageRequest == -1)
        return;

    //onSendMessageRequest(cid, message)
    if(m_interface->reserveEnv())
    {
        ScriptEnviroment* env = m_interface->getEnv();
        env->setScriptId(m_onSendMessageRequest, m_interface);
        env->setNpc(m_npc);

        lua_State* L = m_interface->getState();
        m_interface->pushFunction(m_onSendMessageRequest);

        lua_pushnumber(L, player->getID());
        LuaScriptInterface::pushString(L, message);
     
        m_interface->callFunction(2);
        m_interface->releaseEnv();
    }
    else
        std::cout << "[Error - NpcScript::onSendMessageRequest] NPC Name: " << m_npc->getName() << " - Call stack overflow" << std::endl;
}
Printowałem w którym miejscu tworzy crasha, wypadło na funkcję:
PHP:
m_interface->callFunction(2);
A w niej gdzieś tutaj:
PHP:
    if(lua_pcall(m_luaState, params, 1, handler))
        LuaScriptInterface::error(NULL, LuaScriptInterface::popString(m_luaState));
    else
        result = LuaScriptInterface::popBoolean(m_luaState);
Pytanie brzmi - dlaczego?
Kilka słów wyjaśnień. Crash występuje sporadycznie, tylko podczas używania tej funkcji, wszystkie inne, pisane w identycznym stylu, działają bezproblemowo (powodem może być ten wysyłany pakiet z klienta do silnika). Czasami się w konsoli pojawi błąd, czasami nie. Zwykle jest to:
error in error handling
Walczę z tym już miesiąc i co rusz wymyślę coś nowego, tak spełza to na niczym. Przyjmę każdą wskazówkę do tego co może powodować ten crash. Przypomnę, że pojawia się on dość rzadko, ale na tyle często by przeszkadzać w grze.[/quote]
 
Back
Top