Jump to content

Search the Community

Showing results for tags 'creaturescripts'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • Projetos Open Source
    • MyAAC
    • OTServBR-Global
    • Mehah OTClient
    • Canary
    • Projetos Arquivados
  • OpenTibia
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
    • Divulgação de Servidores
  • Outros
    • Design

Found 2 results

  1. [TFS 0.3.6] onSpawn (Corrigido)

    Olá! Tenho visto alguns códigos pra função "onSpawn" em alguns forums, porém, nenhuma funcionando direito ou de uma forma boa. Resolvi postar a versão do jeito que eu fiz, funcionando 100% pra todos os casos e de forma mais "Limpa". Primeiro, vá para creatureevent.h e procure por: uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Abaixo disto, cole: uint32_t executeSpawn(Creature* creature); Então, procure por: CREATURE_EVENT_PREPAREDEATH, E abaixo disto, cole: CREATURE_EVENT_SPAWN, Agora vá para creatureevent.cpp e procure por: else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; E abaixo disto, cole: else if(tmpStr == "spawn") m_type = CREATURE_EVENT_SPAWN; Procure por: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; E abaixo disto, cole: case CREATURE_EVENT_SPAWN: return "onSpawn"; Então, procure por: case CREATURE_EVENT_LOGIN: return "cid"; E troque por: case CREATURE_EVENT_LOGIN: case CREATURE_EVENT_SPAWN: return "cid"; Então, no fim do arquivo (creatureevent.cpp), cole isto: uint32_t CreatureEvent::executeSpawn(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->setEventDesc(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::cout << "[Error - CreatureEvent::executeSpawn] Call stack overflow." << std::endl; return 0; } } Então vá para monsters.h e procure por: private: ACIMA disto, cole: void alertSpawn(); Agora vá para monsters.cpp e procure por: void Monster::onCreatureAppear(const Creature* creature) ACIMA disto, cole: void Monster::alertSpawn() { CreatureEventList onSpawnEvents = getCreatureEvents(CREATURE_EVENT_SPAWN); for(CreatureEventList::iterator it = onSpawnEvents.begin(); it != onSpawnEvents.end(); ++it) (*it)->executeSpawn(this); } Agora vá para spawn.cpp e procure por esta função: bool Spawn::spawnMonster(uint32_t spawnId, MonsterType* mType, const Position& pos, Direction dir, bool startup /*= false*/) No fim dela, onde estará assim: return true; } Troque por isto: monster->alertSpawn(); return true; } Agora compile e veja se está tudo OK. Agora vamos para data/creaturescripts/creaturescripts.xml, abra e adicione isto lá dentro: <event type="spawn" name="spawn" event="script" value="spawn.lua"/> Agora crie um arquivo dentro de data/creaturescripts/scripts chamado spawn.lua e cole isto: function onSpawn(cid) print("Spawned monster - Name: ".. getCreatureName(cid)) end Você pode mudar pra fazer o que quiser, deixei esse código assim pra você ter como testar ao iniciar seu server, mas não é uma boa ideia deixar assim. Para registrar isso nos monstros, vá para data/monsters/scripts, abra o arquivo do monstro que você quer e deixe o fim do arquivo assim: <script> <event name="spawn"/> </script> </monster> E pronto, deverá tudo funcionar perfeitamente. Espero ter ajudado, e qualquer coisa é só falar. Abraços! Ramza (Ricardo Ianelli)
  2. Pessoal coloquei um ot online e uns amigos fizeram suas contas e vieram sem nenhum item mesmo com o script no creaturescripts funcionando mas depois nao funciona mais o que faço ? alguem tem o script de quest com os itens iniciais ? ja que nao ta dando certo
×