Gpwjhlkdcf 21 #1 Posted January 20, 2010 (edited) Toda vez que quero testar o nível de algum scripter, eu peço a ele um script: a pedra do sexo. Vou disponibilizar o teste aqui, em forma de tópico, para vocês se auto-testarem. Bom, a pedra do sexo consiste em uma action que tem como objetivo trocar o sexo de quem a ativou (De male pra female e de female pra male.) As regras são: Não veja as respostas antes de fazer o script, senão o teste vai, obviamente, falhar. Só veja o resultado quando você tiver certeza de que o script que você fez funciona e executa o que é pedido. Se quiser, poste o seu resultado aqui. Siga o teste passo-a-passo. Se você fez de um jeito diferente dos mostrados aqui, poste como você fez para mim adicionar. Passo 1 [spoiler=Mostrar]Faça uma action que troca o sexo do player que ativou a action, de female pra male e de male pra female. Teste se o script está funcionando e, quando você estiver pronto, siga para o Passo 2! OBS: O ID do sexo female é 0 e do sexo male é 1! Passo 2 [spoiler=Mostrar]Agora compare o script que você fez com os scripts abaixo e veja aonde você se encaixa. Novato function onUse(cid, item, fromPos, itemEx, toPos) if item.itemid == 1285 then if getPlayerSex(cid) == 0 then doPlayerSetSex(cid, 1) elseif getPlayerSex(cid) == 1 then doPlayerSetSex(cid, 1) end end end Iniciante (Arrumei, valeu #Zeus) function onUse(cid, item, fromPos, itemEx, toPos) if getPlayerSex(cid) == 0 then doPlayerSetSex(cid, 1) elseif getPlayerSex(cid) == 1 then doPlayerSetSex(cid, 0) end return true end Intermediário function onUse(cid) if getPlayerSex(cid) == 0 then doPlayerSetSex(cid, 1) return true end doPlayerSetSex(cid, 1) return true end Períto function onUse(cid) local sex = { [0]=1, [1]=0, } doPlayerSetSex(cid, sex[getPlayerSex(cid)]) return true end Avançado function onUse(cid) return doPlayerSetSex(cid, getPlayerSex(cid) == 1 and 0 or 1) and true or false end É isso ai, agora poste seu resultado aqui e boa sorte Vale lembrar que, como todo teste, o resultado pode não ser exato, mas está ai para quem quiser fazer. Eu uso este teste porque há várias formas de se fazer esta action, e baseado no modo como foi feito, dá pra ver mais ou menos o conhecimento do scripter. Edited January 20, 2010 by Skyen Hasus 1 Chacero reacted to this Share this post Link to post Share on other sites
Notorious 1 #2 Posted January 20, 2010 (edited) A primeira vez que voce pediu pra eu fazer no MSN deu Perito xd Muito bom esse teste, muito util, ja usei bastante ... Edited January 20, 2010 by Notorious Share this post Link to post Share on other sites
Mock 32 #3 Posted January 20, 2010 deu avançado aki Share this post Link to post Share on other sites
Nord 2 #4 Posted January 20, 2010 (edited) Como teste funciona muito bem, porém vale ressaltar que GAMEMASTER é sex = 2. function onUse(cid) local sex = getPlayerSex(cid) return sex >= 2 and doPlayerSendCancel(cid, "Only players can change sex.") or doPlayerSetSex(cid, sex == 0 and 1 or 0) end Na sua demonstração de novato, iniciante e intermediário tem um erro, o player só vira homem. Nível professional and pogger! function onUse(cid) return doPlayerSetSex(cid, math.abs(-1-getPlayerSex(cid))) end Edited January 23, 2011 by Mickfern Share this post Link to post Share on other sites
Eventide 7 #5 Posted January 20, 2010 (edited) o código do avançado tem algumas coisinhas erradas... :l tá aqui um mais certo: function onUse(cid) return doPlayerSetSex(cid, (getPlayerSex(cid) == 0)) and true end explicando: no parâmetro, o sexo vai sempre retornar o oposto, pois se o sexo for 1, vai retornar false(0) e se for 0 vai retornar true(1). t+ raposinha do mal e urso das terva @nord ri litros do nível POG, apesar de sempre transfomar o sexo pra 0: -1 - 1 = -2 (retorna 0) -1 - 0 = -1 (retorna 0) Edited January 20, 2010 by Eventide Share this post Link to post Share on other sites
lyndell 0 #6 Posted January 20, 2010 o código do avançado tem algumas coisinhas erradas... :l tá aqui um mais certo: function onUse(cid) return doPlayerSetSex(cid, (getPlayerSex(cid) == 0)) and true end explicando: no parâmetro, o sexo vai sempre retornar o oposto, pois se o sexo for 1, vai retornar false(0) e se for 0 vai retornar true(1). t+ raposinha do mal e urso das terva @nord ri litros do nível POG, apesar de sempre transfomar o sexo pra 0: -1 - 1 = -2 (retorna 0) -1 - 0 = -1 (retorna 0) Sobre o script nord, acho que nem um nem outro, acho que ta certo pelo Math.abs, que retorna o valor positivo, agora, ele irá retornar 1 ou 2, e nao 0 e 1 Share this post Link to post Share on other sites
Sinister 0 #7 Posted January 20, 2010 Deu perito u.u Nao entendo nada que os vicios acima estao falando haiauiuaei Share this post Link to post Share on other sites
Lwkass 1 #8 Posted January 20, 2010 (edited) local sexs = {[0] = 1, [1] = 0} function onUse(cid) return doPlayerSetSex(cid, sexs[getPlayerSex(cid)]) end períto ? :b comofaz pra ser avançado ? '-' Edited January 23, 2011 by Mickfern Share this post Link to post Share on other sites
#Zeus 0 #9 Posted January 20, 2010 function onUse(cid) if getPlayerSex(cid) == 0 then doPlayerSetSex(cid, 1) return true end doPlayerSetSex(cid, 1) return true end Assim ele só vai setar o sexo do player para 1. Share this post Link to post Share on other sites
Eventide 7 #10 Posted January 20, 2010 @lyndell carai, você tá sumido =o tipo velho, o math.abs arredonda números menores que 0 para 0, seria o mesmo que: function math.abs(num) if (num < 0) return 0 end return num end pelo que eu me lembro é isso... =o Share this post Link to post Share on other sites
Dartier 0 #11 Posted January 20, 2010 Deu períto uhu HAUEHAUEHUAE Share this post Link to post Share on other sites
LG 1 #12 Posted January 21, 2010 Períto haha gostei manda mais?? Share this post Link to post Share on other sites
lyndell 0 #13 Posted January 21, 2010 @lyndellcarai, você tá sumido =o tipo velho, o math.abs arredonda números menores que 0 para 0, seria o mesmo que: function math.abs(num) if (num < 0) return 0 end return numend pelo que eu me lembro é isso... =o Eita, nunca fui fluente aqui, haha Sei la, podia jurar que o math.abs retornava o valor absoluto positivo http://lua-users.org/wiki/MathLibraryTutorial achei esse link aqui, uma das primeiras explicações é o math.abs, e parece que ele retorna o positivo mesmo Ja faz meses, quase um ano que nao vejo lua, tambem Share this post Link to post Share on other sites
Warp 0 #14 Posted January 21, 2010 [A]qui deu perito xd. Share this post Link to post Share on other sites
Dokmos 1 #15 Posted January 21, 2010 Galera o meu deu assim: function onUse(cid, item, fromPosition, itemEx, toPosition) return doPlayerSetSex(cid, (1-getPlayerSex(cid))) end Fica parecido com o avançado, mas carrega menos dados. Até mais, Dokmos Share this post Link to post Share on other sites
Sinister 0 #16 Posted January 21, 2010 (edited) /\ Tem um parenteses a mais nao tem? return doPlayerSetSex(cid, (1-getPlayerSex(cid))) --- edit ta certo msm, viajei agr Edited January 21, 2010 by Sinister Share this post Link to post Share on other sites
Dokmos 1 #17 Posted January 21, 2010 Não Sinister, está correto. Pelo menos não encontrei. Share this post Link to post Share on other sites
LordBelkil 2 #18 Posted January 21, 2010 /\Tem um parenteses a mais nao tem? return doPlayerSetSex(cid, (1-getPlayerSex(cid))) Não, acho que você confundiu com o parentese do "(cid)" :whistle: Share this post Link to post Share on other sites
Gpwjhlkdcf 21 #19 Posted January 22, 2010 Galera o meu deu assim: Fica parecido com o avançado, mas carrega menos dados. Até mais, Dokmos mto sagaz a posição do 1 Share this post Link to post Share on other sites
Eventide 7 #20 Posted January 22, 2010 @lyndell é, você tem rasão.. obs¹: gostei do script do Dokmos obs²: quanto períto por aqui... O_O Share this post Link to post Share on other sites