Ir para conteúdo

Featured Replies

  • Respostas 9
  • Visualizações 1.4k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • 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.

  • O primeiro erro significa que não existe compilado na source o event type = onMoveItem, ele não reconheceu esse type. No valid type for creature event.onMoveItem "Não há um tipo válido de creature e

Postado

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:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Postado

@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 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

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado
  • 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

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

I7Pm6ih.png

(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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo