Ir para conteúdo
  • Cadastre-se

(Resolvido)Script não funcional


Ir para solução Resolvido por Killua,

Posts Recomendados

Galera, estou a alguns dias tentando fazer esse script, mas ele não funciona e nem da erro.

alguem poderia me ajudar a resolve-lo?

 

 

function onSay(cid, words, param)

LocalRingbase = 'getPlayerSlotItem(cid, RING)'
 
         if isInArray({2207,2208,2209,2210,2211}, Ringbase) then
         doPlayerRemoveItem(cid, Ringbase)
         doPlayerAddItem(uid, 2216)
         return true
         elseif getPlayerSlotItem(cid, RING) == 2216 then
         doPlayerSendCancel(cid, "Você já esta nesta forma!")
         return false
         else
         doPlayerSendCancel(cid, "Você precisa do transformador equipado!")
         return
         end
         end

A ideia é que o script verificasse o item que está equipado no slot de ANEL do player, e se o anel fosse um que está na tabela,

executasse o script e transformasse ele no item 2216.

o OTScript Live, não acusa nenhum erro...

não sei o que pode ser.

Obrigado galera :)

Link para o post
Compartilhar em outros sites

Amigo, posso estar errado, mas creio que também tem que modificar no Items.xml, você fez alguma modificação la?
Por Exemplo: 

 

<item id="2214" article="a" name="NameOFRing">

<attribute key="weight" value="80"/>
<attribute key="slotType" value="ring"/>
<attribute key="transformEquipTo" value="2216"/>
<attribute key="stopduration" value="1"/>
<attribute key="showduration" value="1"/>
</item>
 Onde está em vermelho, é o id para qual item irá transformar e em azul, ql o id do item, que ira ser colocado no slot do RING
Caso não funcionar, me diga.

Se eu consegui te ajudar, Me ajude com 1 REP+ :wink:            

                          

           logo.png.ff30bd4052f6b8593da9f33166bb6a0b.png

 

[email protected] (Atendimento 24hrs via ticket ou por email)

Skype flathoste!

Faça um orçamento sem compromisso, Te esperamos lá,

Atenciosamente, Equipe Flathoste.

WPP: 75 9 8842-7063

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

Você cometeu muitos erros... Vou te ajudar

 

1 - Pra declarar uma variável local vc usa 'local' (não 'Local') seguido por um '=' e o valor que vc quer armazenar.

2 - Você usou a função getPlayerSlotItem(cid, slot) entre '', fazendo ela ser somente uma string e não uma função.

3 - A variável global 'RING' provavelmente não foi declarada em nenhum lugar, os servidores normalmente vem com a variável CONST_SLOT_RING, que se refere ao slot de id 9.

4 - getPlayerSlotItem(cid, slot) vai te retornar uma tabela com várias informações sobre o item, (exemplos: itemid, uid, itemtype). Quando você vai fazer a comparação em if isInArray({2207,2208,2209,2210,2211}, Ringbase) then você deve especificar quais das informações vc quer usar. No caso vc precisaria usar o id, portanto ficaria assim: if isInArray({2207,2208,2209,2210,2211}, Ringbase.itemid) then

5 - A função doPlayerRemoveItem(cid, item) precisa de um uniqueid (quase o mesmo caso do item 4), então você deveria usar: doPlayerRemoveItem(cid, Ringbase.uid, 1)

6 - elseif getPlayerSlotItem(cid, RING) == 2216 then Além de estar totalmente errada é desnecessária pq vc já guardou o valor de getPlayerSlotItem(cid, slot) em um variável. Além disso, vc está tentando comparar uma tabela com um número. O correto seria: elseif Ringbase.itemid == 2216 then

7 -  Não há necessidade de ficar usando esses returns dentro do escopo, os ifs, elseifs e elses já estão fazendo esse trabalho

8 - Você não retornou true a function onSay(cid, words, param), por conta disso, sempre que o jogador usar o comando ele vai aparecer como fala.

 

Espero que vc leia tudo que eu falei e que isso te ajude a aprender.

Aqui está o script corrigido:

function onSay(cid, words, param)
    
    local Ringbase = getPlayerSlotItem(cid, CONST_SLOT_RING)
 
    if isInArray({2207,2208,2209,2210,2211}, Ringbase.itemid) then
        doPlayerRemoveItem(cid, Ringbase.uid, 1)
        doPlayerAddItem(cid, 2216, 1)
    elseif Ringbase.itemid == 2216 then
        doPlayerSendCancel(cid, "Você já esta nesta forma!")
    else
        doPlayerSendCancel(cid, "Você precisa do transformador equipado!")
    end
    return true
end

 

 

 

 

 

v61snZO.png?129bcx1x.pngiVgTXVz.png?1

 

 

 

 

 

Link para o post
Compartilhar em outros sites

 

Você cometeu muitos erros... Vou te ajudar

 

1 - Pra declarar uma variável local vc usa 'local' (não 'Local') seguido por um '=' e o valor que vc quer armazenar.

2 - Você usou a função getPlayerSlotItem(cid, slot) entre '', fazendo ela ser somente uma string e não uma função.

3 - A variável global 'RING' provavelmente não foi declarada em nenhum lugar, os servidores normalmente vem com a variável CONST_SLOT_RING, que se refere ao slot de id 9.

4 - getPlayerSlotItem(cid, slot) vai te retornar uma tabela com várias informações sobre o item, (exemplos: itemid, uid, itemtype). Quando você vai fazer a comparação em if isInArray({2207,2208,2209,2210,2211}, Ringbase) then você deve especificar quais das informações vc quer usar. No caso vc precisaria usar o id, portanto ficaria assim: if isInArray({2207,2208,2209,2210,2211}, Ringbase.itemid) then

5 - A função doPlayerRemoveItem(cid, item) precisa de um uniqueid (quase o mesmo caso do item 4), então você deveria usar: doPlayerRemoveItem(cid, Ringbase.uid, 1)

6 - elseif getPlayerSlotItem(cid, RING) == 2216 then Além de estar totalmente errada é desnecessária pq vc já guardou o valor de getPlayerSlotItem(cid, slot) em um variável. Além disso, vc está tentando comparar uma tabela com um número. O correto seria: elseif Ringbase.itemid == 2216 then

7 -  Não há necessidade de ficar usando esses returns dentro do escopo, os ifs, elseifs e elses já estão fazendo esse trabalho

8 - Você não retornou true a function onSay(cid, words, param), por conta disso, sempre que o jogador usar o comando ele vai aparecer como fala.

 

Espero que vc leia tudo que eu falei e que isso te ajude a aprender.

Aqui está o script corrigido:

function onSay(cid, words, param)
    
    local Ringbase = getPlayerSlotItem(cid, CONST_SLOT_RING)
 
    if isInArray({2207,2208,2209,2210,2211}, Ringbase.itemid) then
        doPlayerRemoveItem(cid, Ringbase.uid, 1)
        doPlayerAddItem(cid, 2216, 1)
    elseif Ringbase.itemid == 2216 then
        doPlayerSendCancel(cid, "Você já esta nesta forma!")
    else
        doPlayerSendCancel(cid, "Você precisa do transformador equipado!")
    end
    return true
end

 

Nossa mano, vlw mesmo...

tipo... eu li os tutoriais disponiveis mas na hora de por em pratica mesmo...

é muito complexo, mais complexo do que eu esperava kkk

mas continuarei praticando!!!

muito obrigado, dei um "gostei" :)

membros como você que animam nós a aprendermos...

THANKS

Link para o post
Compartilhar em outros sites

 

Você cometeu muitos erros... Vou te ajudar

 

1 - Pra declarar uma variável local vc usa 'local' (não 'Local') seguido por um '=' e o valor que vc quer armazenar.

2 - Você usou a função getPlayerSlotItem(cid, slot) entre '', fazendo ela ser somente uma string e não uma função.

3 - A variável global 'RING' provavelmente não foi declarada em nenhum lugar, os servidores normalmente vem com a variável CONST_SLOT_RING, que se refere ao slot de id 9.

4 - getPlayerSlotItem(cid, slot) vai te retornar uma tabela com várias informações sobre o item, (exemplos: itemid, uid, itemtype). Quando você vai fazer a comparação em if isInArray({2207,2208,2209,2210,2211}, Ringbase) then você deve especificar quais das informações vc quer usar. No caso vc precisaria usar o id, portanto ficaria assim: if isInArray({2207,2208,2209,2210,2211}, Ringbase.itemid) then

5 - A função doPlayerRemoveItem(cid, item) precisa de um uniqueid (quase o mesmo caso do item 4), então você deveria usar: doPlayerRemoveItem(cid, Ringbase.uid, 1)

6 - elseif getPlayerSlotItem(cid, RING) == 2216 then Além de estar totalmente errada é desnecessária pq vc já guardou o valor de getPlayerSlotItem(cid, slot) em um variável. Além disso, vc está tentando comparar uma tabela com um número. O correto seria: elseif Ringbase.itemid == 2216 then

7 -  Não há necessidade de ficar usando esses returns dentro do escopo, os ifs, elseifs e elses já estão fazendo esse trabalho

8 - Você não retornou true a function onSay(cid, words, param), por conta disso, sempre que o jogador usar o comando ele vai aparecer como fala.

 

Espero que vc leia tudo que eu falei e que isso te ajude a aprender.

Aqui está o script corrigido:

function onSay(cid, words, param)
    
    local Ringbase = getPlayerSlotItem(cid, CONST_SLOT_RING)
 
    if isInArray({2207,2208,2209,2210,2211}, Ringbase.itemid) then
        doPlayerRemoveItem(cid, Ringbase.uid, 1)
        doPlayerAddItem(cid, 2216, 1)
    elseif Ringbase.itemid == 2216 then
        doPlayerSendCancel(cid, "Você já esta nesta forma!")
    else
        doPlayerSendCancel(cid, "Você precisa do transformador equipado!")
    end
    return true
end

Muito bom, eu ia tentar ajudar ele mas vi que você já fez o mesmo, parabéns pela explicação excelente, reputado! :accept:

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