Ir para conteúdo
  • Cadastre-se

Normal [suporte] como usar func onMoveItem?


Posts Recomendados

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

Link para o post
Compartilhar em outros sites

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

Link para o post
Compartilhar em outros sites

@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
Link para o post
Compartilhar em outros sites

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)

Link para o post
Compartilhar em outros sites

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.

 

Parece que há um problema aqui

<event type="onMoveItem" name="moveParcelRookgaard" event="script" value="moveParcelRookgaard.lua"/>

No valid type for creature event.onMoveItem

 

 

Tentei trocar por MoveItem e moveitem

Da esse erro:

JaG9QEz.png

Editado por danbsten (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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 event chamado onMoveItem"

Após as alterações que você fez ele entendeu o script mas o código possui um erro lógico na linha 4: faltou um then próximo do doRemoveItem.
Indo na linha 4 vemos claramente que está faltando um then para abrir o bloco de instrução do código if

 if item.itemid == 2596

deveria ser

 if item.itemid == 2596 then

Isso deve resolver kkk mas só escrevi as coisas aqui acima pra você entender +- como interpretar as coisas que nosso console nos diz..

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)

Link para o post
Compartilhar em outros sites

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 event chamado onMoveItem"

Após as alterações que você fez ele entendeu o script mas o código possui um erro lógico na linha 4: faltou um then próximo do doRemoveItem.

Indo na linha 4 vemos claramente que está faltando um then para abrir o bloco de instrução do código if

 if item.itemid == 2596

deveria ser

 if item.itemid == 2596 then

Isso deve resolver kkk mas só escrevi as coisas aqui acima pra você entender +- como interpretar as coisas que nosso console nos diz..

 

nossa q burrice minha, esqueci do then...

 

Obrigado mano, mas se liga só...

 

Não ta dando erro, compila tranquilo, mas não ta funcionando eu arrasto os parcels pra todo lado com a vocação 0 e nada é deletado

<event type="moveitem" 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 then
            doRemoveItem(item.uid, 1)
            return true
        end
    end
end

registerCreatureEvent(cid, "moveParcelRookgaard")
Editado por danbsten (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Onde você colocou o register?

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

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Jaurez
      .
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • Por danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • Por Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • Por Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo