Olá Membros do Xtibia tudo na paz? Creio que sim hoje eu venho postar á função OnWalk eu procurei bastante por ela na época em que eu usava á versão 0.3.6/0.4 e nunca consegui encontrar na época ela era necessária para o TV System do PDA Funcionar e quando eu adaptava uma source sempre faltava á função, bom os problemas acabaram a partir de hoje, la vai á função ae logo abaixo.
Vá no arquivo creatureevent.cpp e procure por:
else if(tmpStr == "spawn") m_type = CREATURE_EVENT_SPAWN;
Logo abaixo coloque:
else if(tmpStr == "walk") m_type = CREATURE_EVENT_WALK;
Depois procure por:
case CREATURE_EVENT_SPAWN: return "onSpawn";
Logo abaixo coloque:
case CREATURE_EVENT_WALK: return "onWalk";
Depois procure por:
case CREATURE_EVENT_SPAWN: return "cid";
Logo abaixo coloque:
case CREATURE_EVENT_WALK: return "cid, fromPosition, toPosition";
Depois procure por:
uint32_t CreatureEvent::executeOnSpawn(Creature* creature) { //onSpawn(cid) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ std::stringstream desc; desc << creature->getName(); env->setEvent(desc.str()); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); bool result = m_interface->callFunction(1); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeCast] Call stack overflow." << std::endl; return 0; } }
Dê uma quebra de linha e logo abaixo coloque:
uint32_t CreatureEvent::executeWalk(Creature* creature, const Position& fromPosition, const Position& toPosition) { //onWalk(cid, old, current) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; env->streamPosition(scriptstream, "fromPosition", fromPosition, 0); env->streamPosition(scriptstream, "toPosition", toPosition, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", creature->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeMove] Call stack overflow." << std::endl; return 0; } }
Agora vá no arquivo creatureevent.h procure por:
CREATURE_EVENT_SPAWN,
Logo abaixo coloque:
CREATURE_EVENT_WALK,
Depois procure por:
uint32_t executeOnSpawn(Creature* creature);
Logo abaixo coloque:
uint32_t executeWalk(Creature* creature, const Position& fromPosition, const Position& toPosition);
Pronto Agora basta compilar e Pronto.
Espero ter Ajudado qualquer dúvida estarei respondendo, Abraço.
Créditos:
Darkhaos (De outro fórum)