Postado Setembro 11, 2014 10 anos 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
Postado Setembro 11, 2014 10 anos 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+ 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 Setembro 12, 2014 10 anos 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 Meus trabalhos no fórum
Postado Setembro 12, 2014 10 anos 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 Setembro 12, 2014 10 anos 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!
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.