Postado Agosto 13, 2015 9 anos http://www.tibiaking.com/forum/topic/33395-tfs-04-cast/ • Add creatureevent onMoveItem() . Como trabalhar com ela? Tipo se o player for x vocação e mover x item esse item ser deletado? só de exemplo...
Postado Agosto 13, 2015 9 anos creatureevent.cpp //Função add por luanluciano93 uint32_t CreatureEvent::executeMoveItem(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack) { //onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; env->streamThing(scriptstream, "item", item, env->addThing(item)); scriptstream << "local count = " << count << std::endl; env->streamThing(scriptstream, "toContainer", toContainer, env->addThing(toContainer)); env->streamThing(scriptstream, "fromContainer", fromContainer, env->addThing(fromContainer)); env->streamPosition(scriptstream, "fromPos", fromPos, fstack); env->streamPosition(scriptstream, "toPos", toPos, 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", player->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); LuaInterface::pushThing(L, item, env->addThing(item)); lua_pushnumber(L, count); LuaInterface::pushThing(L, toContainer, env->addThing(toContainer)); LuaInterface::pushThing(L, fromContainer, env->addThing(fromContainer)); LuaInterface::pushPosition(L, fromPos, fstack); LuaInterface::pushPosition(L, toPos, 0); bool result = m_interface->callFunction(7); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } o que você quis dizer com: Tipo se o player for x vocação e mover x item esse item ser deletado? só de exemplo... ? Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado). Tópicos: [FAQ] BBCODE [LIB] Constant [RME] Administrando bordas. [TALK] Broadcast Editável. [TALK] Sugest. [TALK] Checkpoint. [MOVE] Pântano pegajoso. [ACTION] Piggy Bank. (Cassino). [GLOBAL] Uptime Ad. [C0DE] Consertando 'Invalid Password' [PROGRAM] Quest Maker
Postado Agosto 13, 2015 9 anos @Caronte, não é todo mundo que sabe interpretar c++.. acho q ficaria melhor se vc fizesse um script de exemplo de como usar o callback@OP: é um callback de creaturescript que você seta pra ser ativado quando algum player mover um determinado item, com essa função é possivel manipular tanto o item quanto os containers envolvidos nessa transação. Por exemplo: pra fazer uma backpack que só entra potion não seria possivel sem essa função. function onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) onde cid é quem moveu, item é o item movido, count é a quantidade, toContainer é o container pra qual o item está sendo movido, fromContainer é o container que o item estava originalmente, fromPos é a posição que o item estava e toPos é a nova posição que o item está sendo movido. O resto é só usar imaginando pra manipular essas coisas, exemplo: Um script que se o player passar uma gema de id 10281 pra backpack dele soltar um efeito nele: function onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) if item.itemid == 10281 and getPlayerSlotItem(cid, 3).uid == toContainer.uid then doSendMagicEffect(toPos, 26) -- solta o efeito 26 na posição nova do item (mesma posição do player) end return true end Os usos de um callback são praticamente infinitos, basta ter criatividade e explorar bastante! Espero ter ajudado.. Editado Agosto 13, 2015 9 anos por xWhiteWolf (veja o histórico de edições) Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Agosto 13, 2015 9 anos Autor @Caronte, não é todo mundo que sabe interpretar c++.. acho q ficaria melhor se vc fizesse um script de exemplo de como usar o callback @OP: é um callback de creaturescript que você seta pra ser ativado quando algum player mover um determinado item, com essa função é possivel manipular tanto o item quanto os containers envolvidos nessa transação. Por exemplo: pra fazer uma backpack que só entra potion não seria possivel sem essa função. function onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) onde cid é quem moveu, item é o item movido, count é a quantidade, toContainer é o container pra qual o item está sendo movido, fromContainer é o container que o item estava originalmente, fromPos é a posição que o item estava e toPos é a nova posição que o item está sendo movido. O resto é só usar imaginando pra manipular essas coisas, exemplo: Um script que se o player passar uma gema de id 10281 pra backpack dele soltar um efeito nele: function onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) if item.itemid == 10281 and getPlayerSlotItem(cid, 3).uid == toContainer.uid then doSendMagicEffect(toPos, 26) -- solta o efeito 26 na posição nova do item (mesma posição do player) end return true end Os usos de um callback são praticamente infinitos, basta ter criatividade e explorar bastante! Espero ter ajudado.. Malz atingi o limite de reps por hoje Minha dúvida era como usar esse meu script pra rodar nessa source <event type="onMoveItem" name="moveParcelRookgaard" event="script" value="moveParcelRookgaard.lua"/> function onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) if getPlayerVocation(cid) == 0 then if item.itemid == 2596 doRemoveItem(item.uid, 1) return true end end end
Postado Agosto 14, 2015 9 anos falta só adicionar o login.lua pra registrar esse callback (isso garantindo q vc tem esse callback na sua source). Daí toda vez que um player for vocação 0 e mover um item 2596 ele vai ser removido. Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.