Ir para conteúdo
Banner com Efeitos

Featured Replies

Postado

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?

 

  Citar

 

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

Resolvido por Killua

Ir para solução
  • Respostas 6
  • Visualizações 523
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

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

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

  • De nada, gosto de tirar dúvidas de pessoas que estão tentando aprender

Postado

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

 

Suporte@Flathoste.com.br (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

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

 

 

 

 

 

Postado
  • Autor
  Em 12/09/2014 em 01:35, Killua disse:

 

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

Postado
  Em 12/09/2014 em 01:35, Killua disse:

 

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:

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

Informação Importante

Confirmação de Termo