Pytanie do wyjadaczy Cpp. Wysyłam z OTC pakiet z jedną stałą:
W game.cpp przesyłam ją do najbliżej stojących NPCtów i przechodzi dalej do npc.cpp:
Printowałem w którym miejscu tworzy crasha, wypadło na funkcję:
A w niej gdzieś tutaj:
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:
PHP:
void ProtocolGame::parseMessageChoose(NetworkMessage& msg)
{
const std::string text = msg.GetString();
g_game.playerSendRequestMessage(player, text);
}
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;
}
PHP:
m_interface->callFunction(2);
PHP:
if(lua_pcall(m_luaState, params, 1, handler))
LuaScriptInterface::error(NULL, LuaScriptInterface::popString(m_luaState));
else
result = LuaScriptInterface::popBoolean(m_luaState);
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:
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]error in error handling