Administrador gutinha 1.287 Postado 6 de Agosto 2023 Administrador Compartilhar Postado 6 de Agosto 2023 Opa, venho trazer uma função que pode ser usado em jogadores, monstros ou npcs, funciona quando uma criatura anda. 1° Passo Spoiler Em creatureevent.h Em baixo de CREATURE_EVENT_DIRECTION, Adicione CREATURE_EVENT_MOVE, Em baixo de uint32_t executeDirection(Creature* creature, Direction old, Direction current); Adicione uint32_t executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition); 2° Passo Spoiler Em creatureevent.cpp Em baixo de else if(tmpStr == "direction") m_type = CREATURE_EVENT_DIRECTION; Adicione else if(tmpStr == "move") m_type = CREATURE_EVENT_MOVE; Em baixo de case CREATURE_EVENT_DIRECTION: return "onDirection"; Adicione case CREATURE_EVENT_MOVE: return "onMove"; Em baixo de case CREATURE_EVENT_OUTFIT: return "cid, old, current"; Adicione case CREATURE_EVENT_MOVE: return "cid, fromPosition, toPosition"; Em baixo da função uint32_t CreatureEvent::executeDirection(Creature* creature, Direction old, Direction current) Adicione a função uint32_t CreatureEvent::executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition) { //onMove(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); lua_pushnumber(L, env->addThing(creature)); LuaScriptInterface::pushPosition(L, fromPosition); LuaScriptInterface::pushPosition(L, toPosition); bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeMove] Call stack overflow." << std::endl; return 0; } } 3° Passo Spoiler Em game.cpp Em baixo de else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position( destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down { flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE; destPos.z++; } } Adicione bool deny = false; CreatureEventList moveEvents = creature->getCreatureEvents(CREATURE_EVENT_MOVE); for(CreatureEventList::iterator it = moveEvents.begin(); it != moveEvents.end(); ++it) { if(!(*it)->executeMove(creature, currentPos, destPos)) deny = true; } if(deny){ return RET_NOTPOSSIBLE; } Agora, compile a source Como usar Spoiler function onMove(cid, fromPosition, toPosition) if(toPosition.x == 100 and toPosition.y == 100 and toPosition.z == 7) then doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) end return true end E adicione em creaturescrips.xml <event type="move" name="Move" event="script" value="move.lua"/> 7 2 1 Link para o comentário https://tibiadevs.com/forums/topic/53-creatureevent-function-onmovecid-fromposition-toposition-tfs-036/ Compartilhar em outros sites Mais opções de compartilhamento...
messiah 8 Postado 31 de Julho Compartilhar Postado 31 de Julho testei ak e foi tranquilo, compilou certinho, porem por algum motivo bugou TUDO os pokemons selvagens, e n apareceu na distro um sistema d spawn q meu servidor contem, oq poderia ser? Link para o comentário https://tibiadevs.com/forums/topic/53-creatureevent-function-onmovecid-fromposition-toposition-tfs-036/#findComment-2768 Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
Crie uma conta ou entre para comentar
Você precisar ser um membro para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora