tá, vamos lá:
Primeiro lugar seu código não tá completo, ele possui erros gravíssimos e isso explicaria por si só grande parte do motivo de não funcionar..
1- Pra todo if que você tem você precisa de um end pra fechar o bloco dele.
a melhor forma de perceber isso é identando seu código, baixe o notepad++ aí q ele vai te dizer onde um bloco abre e onde ele fecha e use sempre o tab pra identar e não perder controle sobre seu código
Agora vamos lá, arrumando o erro [1] seu código deverá ficar assim, note que é muito mais fácil entender o que cada coisa faz
local pokes1 = getLivePokeballs(cid, getPlayerSlotItem(cid, 3).uid, true) local pokes2 = getLivePokeballs(sid, getPlayerSlotItem(sid, 3).uid, true) function onJoinChannel(cid, channelId, users, isTv) if getPlayerVocation(cid) ~= 88 then return false end -- nem continua pra baixo caso seja ~= 88 if channelId == config.channelId1 then if #pokes1 < (channelId-12) or #pokes2 < (channelId-12) then local tpw = getPlayerStorageValue(cid, STORAGEx) < 1 and "ally" or "opponent" doPlayerSendTextMessage(cid, 20, "You or your "..tpw.." doesn't have that amount of pokemons in their bags! Duel are canceled!") doPlayerSetVocation(cid, 1) else setPlayerStorageValue(cid, STORAGEx, 0) setPlayerStorageValue(cid, STORAGEy, 1) setGlobalStorageValue(STORAGEx, 1) doSendAnimatedText(getThingPos(cid), "1 Pokemon", 28) doPlayerSetVocation(cid, 1) end end return false end
2- Você só pode utilizar coisas como parâmetro que existam, sério, muita gente ainda acredita que cid significa sempre o player e isso não é verdade. No geral cid só existe dentro do callback (função principal do script) pois ele é o primeiro parâmetro da função, acompanha cmg:
function onJoinChannel(cid, channelId, users, isTv)
esse é o callback e olha só ali o nosso cid. Eu só posso usar coisas que utilizam o cid debaixo dessa linha aí pois antes disso ele não é definido, logo isso daqui daria erro:
local pokes1 = getLivePokeballs(cid, getPlayerSlotItem(cid, 3).uid, true) local pokes2 = getLivePokeballs(sid, getPlayerSlotItem(sid, 3).uid, true) function onJoinChannel(cid, channelId, users, isTv)
Sem falar que sid não existe, você vai ter que pensar em outra forma de coletar os pokemons do oponente e eu dou um bom palpite que você poderia usar aquele users ali no callback pra checar os players que já estão no channel. Nunca mexi com esse callback mas é um bom palpite, coloca pra printar o type daquilo e vai fazer testes pra ver como funciona aquilo (ou se vc manjar de source, olha na source como a função tá definida)
Por fim, se vc só usa a variável uma vez, não tem porque definí-la. Corrigindo tudo ficamos com:
function onJoinChannel(cid, channelId, users, isTv) if getPlayerVocation(cid) ~= 88 then return false end if channelId == config.channelId1 then if #getLivePokeballs(cid, getPlayerSlotItem(cid, 3).uid, true) < (channelId-12) or #getLivePokeballs(sid, getPlayerSlotItem(sid, 3).uid, true) < (channelId-12) then local tpw = getPlayerStorageValue(cid, STORAGEx) < 1 and "ally" or "opponent" doPlayerSendTextMessage(cid, 20, "You or your "..tpw.." doesn't have that amount of pokemons in their bags! Duel are canceled!") doPlayerSetVocation(cid, 1) else setPlayerStorageValue(cid, STORAGEx, 0) setPlayerStorageValue(cid, STORAGEy, 1) setGlobalStorageValue(STORAGEx, 1) doSendAnimatedText(getThingPos(cid), "1 Pokemon", 28) doPlayerSetVocation(cid, 1) end end return false end
Mas ainda não é certo de isso funcionar, só corrigi a parte estrutural do código.. to partindo do pressuposto que a semântica você acertou.




info
Grupo: Conde
Registrado: 01/07/13
Posts: 521
Reputação: +291
Bom á muito venho tentando e já deixei o sistema PRONTO!
Sim está pronto, porém uma coisa que me intrigou e que no momento em que tentei não achei que daria errado.. Mas é.. Deu errado!
Um amigo me indicou uma função para que fossem contadas as pokebolas que o jogador tem no sloot, adicionei a função e logo em seguida testei a mesma com um básico print:
No goback, e mandou o número exato de pokebolas que o jogador tinha em sua pokebag/bolsa. Ai veio a parte estranha, fui utilizar exatamente a mesma função no creaturescript utilizado para selecionar o número de pokemons que o jogador quer duelar, usei da seguinte maneira:
local pokes1 = getLivePokeballs(cid, getPlayerSlotItem(cid, 3).uid, true) local pokes2 = getLivePokeballs(sid, getPlayerSlotItem(sid, 3).uid, true) function onJoinChannel(cid, channelId, users, isTv) if getPlayerVocation(cid) ~= 88 then return false else if channelId == config.channelId1 then if #pokes1 < (channelId-12) or #pokes2 < (channelId-12) then local tpw = getPlayerStorageValue(cid, STORAGEx) < 1 and "ally" or "opponent" doPlayerSendTextMessage(cid, 20, "You or your "..tpw.." doesn't have that amount of pokemons in their bags! Duel are canceled!") doPlayerSetVocation(cid, 1) else setPlayerStorageValue(cid, STORAGEx, 0) setPlayerStorageValue(cid, STORAGEy, 1) setGlobalStorageValue(STORAGEx, 1) doSendAnimatedText(getThingPos(cid), "1 Pokemon", 28) doPlayerSetVocation(cid, 1) return false endif channelId == config.channelId1 then if getPlayerPokeballs(cid) >= 1 then return doPlayerSendCancel("You don't have pokemon!") end setPlayerStorageValue(cid, STORAGEx, 0) setPlayerStorageValue(cid, STORAGEy, 1) setGlobalStorageValue(STORAGEx, 1) doSendAnimatedText(getThingPos(cid), "1 Pokemon", 28) doPlayerSetVocation(cid, 1) return false