Administrador gutinha 1.280 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 Citar Link para o comentário 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? Citar Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
Participe da Conversa
Você pode postar agora e se cadastrar mais tarde. Cadastre-se Agora para publicar com Sua Conta.