Ir para conteúdo
  • Cadastre-se

(Resolvido)Dúvida parameters de Movement


Ir para solução Resolvido por xWhiteWolf,

Posts Recomendados

Fala galerinha do tk, hoje é minha vez de tirar uma dúvida aqui kkk então, o problema é o seguinte:
eu criei um script bem simpleszinho que removia o item caso o player tentasse desequipar ele mas acontece que o script vivia bugando, se eu colocasse ele dentro da BP ou jogasse ele no lago o server caia então eu fiz umas edições e cheguei nisso daqui:

function onDeEquip(cid, item, position, fromPosition)
if doRemoveItem(item.uid, 1) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "ITEM REMOVIDO...")
doSendMagicEffect(getCreaturePos(cid), 10)
return false
end
end

note que os parameters que eu usei são diferentes doque está nas sources

function onDeEquip(cid, item, position, fromPosition)

 nas sources temos esse callback como sendo 

function onDeEquip(cid, item, slot)

só que quando eu usava slot, se eu jogasse o item direto da armor pro lixo o server crashava.

Enfim, tudo funcionava perfeitamente quando eu decidi mudar o slot de armor pra hands...
funcionou mas eis que eu me deparei com um bug pra lá de chato:

<movevent type="DeEquip" itemid="7773" slot="hand" event="script" value="item.lua"/>

Se o cara tiver com as duas mãos vazias e passar o item de uma mão pra outra o script executa a função de remover duas vezes só que só tem um item então dá um erro (tentar remover algo que já foi removido)

[10/05/2014 20:39:28] [Error - MoveEvents Interface] [10/05/2014 20:39:28] data/movements/scripts/item.lua:onDeEquip
[10/05/2014 20:39:28] Description: 
[10/05/2014 20:39:28] (luaDoRemoveItem) Item not found

Alguém sabe algum jeito de arrumar isso pra não dar esse erro? Tentei várias coisas mas a maioria não deu certo e o resto fez meu script parar de funcionar kkk

Meu server é o The Forgotten Server, version 0.3.6 (Crying Damson), Tibia 8.54

Me ajudem aí que eu prometo postar o sistema do qual esse script faz parte :]

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
function onDeEquip(cid, item, slot)
local slots = getPlayerSlotItem(cid, slot )
if slots.itemid ~= item.itemid then
return true
end
if doRemoveItem(item.uid, 1) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "ITEM REMOVIDO...")
doSendMagicEffect(getCreaturePos(cid), 10)
end
return true
end

Fiz de cabeça, não sei se funcionará.

Editado por Jamison Collins (veja o histórico de edições)

"A alma permanece em suas criações" V89E5aN.png


142c9d3439.jpg
(Não dou suporte por mensagem privada.)

Link para o post
Compartilhar em outros sites

não funcionou, por hora eu consegui arrumar mudando o slot do movements.xml.. coloquei slot="right-hand" e já que só remove o item se for na mão esquerda (lado direito), qnd eu passo pra direita (lado esquerdo) não dá bug de remover 2x... mas ainda estou interessado em alguma solução;
Oque eu quero mesmo é que o player possa mudar o item pra outra mão porque a função doPlayerAddItem adiciona sempre na mão esquerda (>>) mas a maioria dos caras que jogam tibia usam as armas na mão direita (<<) mas gostaria que se ele tentasse colocar a arma em qualquer outro slot ou mover ela pra backpack ou jogar ela no chão, o item fosse removido automaticamente.

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

up

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

Nunca gostei muito dessa Rev. Crying Damson sempre deu problemas sem lógica com movements. Tenta com outra versão, se não der certo posta o feedback aqui que tento ajudar!

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites
  • Solução

pior q nem é um problema sem lógica uhauhauh eu coloquei pra toda vez que desequipar uma determinada arma da mão, ela fosse removida.. só que quando o player passa de uma mão pra outra ele remove ela e já conta como se tivesse equipado, ao remover ela pela função doRemoveItem é como se tivesse desequipado (da outra mão agora) e ele vai remover algo que já foi removido, por isso dá erro na distro. Eu pensei em um monte de formas mas a maioria delas inclui repetir o id do item pra outro movement onEquip (oque vai dar erro no console), eu consegui resolver certinho de uma maneira meio escrota e pras minhas necessidades acabou dando certo.... mas a idéia era fazer um scrip 100% funcional pra que outros pudessem mudar à vontade pra postar aqui. Enfim né, até amanhã vou postar o script da forma que tá e te convido pra dar uma olhada e ver se vc pensa em alguma outra forma de resolver o problema. Abração Max.

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

AH, então o que acontece é um callback overflow, algo assim. Por exemplo. Se você coloca um movement pra quando pisar em um tile, teletransportar pro mesmo tile. O onStepIn vai ser executado várias vezes até dar debug no client e_e.

 

 

Já passei por uma situação parecida, quando eu precisava mudar a outfit de um player, dentro do método onOutfit. Pra solucionar foi só colocar uma storage no player, aí quando essa storage tem um valor positivo, o bloco principal não é executado. Exemplo:

 

 

function onOutfit(cid)
   if getPlayerStorageValue(cid, 60000) > 0 then
      return true
   end
 
   setPlayerStorageValue(cid, 60000, 1)
   doCreatureChangeOutfit(cid, newOutfit)
   setPlayerStorageValue(cid, 60000, -1)
   return false
end

 

Algo tipo isso ahuahua

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites

isso não resolveria o problema kkk pq eu queria que o player pudesse mudar livremente a mão que está a arma, mas se o slot fosse diferente de "hands" o item fosse removido, contudo, a unica forma de fazer isso é usando o callback onDeEquip (cid, item, slot) mas daí se o cara pegar o item e jogar no rio o server crasha. Pra que não crashe tem que usar onDeEquip(cid, item, position, fromPosition); Enfim, hoje ou amanhã vc dá uma olhada no sistema como um todo e me fala qq vc achou, combinado?
 

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

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo