Night Wolf 285 Postado Novembro 5, 2015 Share Postado Novembro 5, 2015 (editado) Olá pessoal, seguindo a onda do desafio do mês eu bolei um novo desafio pra vocês no mesmo esquema do anterior (você pode verificar o desafio do mês passado clicando aqui)Eu vou mais uma vez apresentar um pseudocódigo, algumas partes dele estão mais explícitas na linguagem e outras estão mais teóricas mas isso não vai influenciar tanto. local position = {x = 160, y = 154, z = 7} -- posição do que? function fazQualquerCoisa(cid, pos, i, j) -- recursao caudal j = j or 0 p = i or 0 if p >= config.rX then p = 0 j = j < config.rY -1 and j + 1 or false end if j then posi = {x = pos.x + ( p * config.distX), y = pos.y + (j * config.distY), z = pos.z} if check_disponivel(posi) then doTeleportThing(cid, posi) countdown({{x = posi.x + 1, y = posi.y - 1, z = posi.z}, {x = posi.x - 1 , y = posi.y - 1, z = posi.z}} ) else fazQualquerCoisa(cid, pos, p + 1, j) end end end function check_disponivel(npos) if disponivel(npos) then return true end return false end function countdown(pos, Arraypos) -- apenas a ideia, pode ser que isso nao seja a prova de bugs e tenha que ser feito uma versao recursiva. local tempo = 5 -- tempo de que? for lugares = 1, #Arraypos do for j = 0, tempo do addEvent(function() sendTextMessage(Arraypos[lugares], tempo - j, TEXTCOLOR_ORANGE) if j == tempo and not check_disponivel(pos) then createMonster(Arraypos[lugares], "Nome monstro") end end, 1000 * j) end end end function onStepIn(cid) fazQualquerCoisa(cid, position) return true end O desafio é o seguinte: vocês tem que tentar adivinhar do que se trata esse código. Isso vale tanto para explicar partes do código quanto para explicar a idéia por trás dele.A cada dia (o primeiro não conta) irei postar uma dica para ajudá-los nesse desafio, podendo ser uma dica explicando partes do código ou dicas sobre a funcionalidade dele."Mas lobo, por que eu iria tentar descobrir do que se trata seu código estúpido?" Bem meu caro, será uma tarefa legal e esse script é uma idéia bem inovadora.. só o fato de você tentar ler irá ajudá-lo a treinar seu cérebro para a linguagem Lua. E também há uma recompensa!! aquele que acertar ou chegar mais perto verá e terá acesso ao código antes de todo mundo!!111Espero que vocês aninem pra participar deste tanto quanto animaram para participar do outro Dicas = { } Lembrando que toda resposta próxima da correta irá ganhar 1 ponto de reputação. Editado Novembro 5, 2015 por Night Wolf Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/ Compartilhar em outros sites More sharing options...
AlekysRocha19 1 Postado Novembro 5, 2015 Share Postado Novembro 5, 2015 Legal o desafio e a iniciativa para entender a linguagem lua, laços de repetição. Legal lobo Boa sorte aos participantes Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1674969 Compartilhar em outros sites More sharing options...
Antharaz 93 Postado Novembro 5, 2015 Share Postado Novembro 5, 2015 Tudo bem, nunca tinha participado deste desafio antes... vamos lá... antes de tudo, quero dizer que ao falar var config.rX eu me refiro ao índice rX da table config, usei var config.rX para evitar ficar muito grande, o mesmo vale para os variantes disto. Esta function countdown(pos) realiza uma contagem regressiva do que o scripter definir na variável tempo até 0 (na tela in game, enquanto no script ele aumenta a var j até chegar no valor tempo) e quando chega a 0 e, ao mesmo tempo, se a posição pos[lugares] estiver disponível, então ele cria o "monstro" (que deve ser colocado o nome no lugar de"Nome monstro") em todas posições da tabela indicada como parâmetro para a função. Lembrando que a contagem in game é feita na mesma pos onde o monstro será criado. function countdown(pos) -- apenas a ideia, pode ser que isso nao seja a prova de bugs e tenha que ser feito uma versao recursiva. for lugares = 1, #pos do for j = 0, tempo do addEvent(sendTextMessage, 1000 * j, tempo - j, pos[lugares]) if j == tempo and not check_disponivel(pos) then createMonster(pos[lugares], "Nome monstro") end end end end Essa function check_disponivel(pos) não entendi direito, creio que seja para checar se a posição está disponível para teleportar o player. function countdown(pos) -- apenas a ideia, pode ser que isso nao seja a prova de bugs e tenha que ser feito uma versao recursiva. for lugares = 1, #pos do for j = 0, tempo do addEvent(sendTextMessage, 1000 * j, tempo - j, pos[lugares]) if j == tempo and not check_disponivel(pos) then createMonster(pos[lugares], "Nome monstro") end end end end A function onStepIn(cid) apenas chama a function fazQualquerCoisa(cid) quando alguém sobe em cima do tile, mandando o uid do player como parâmetro. function onStepIn(cid) fazQualquerCoisa(cid) return true end Agora vamos a function fazQualquerCoisa(cid, i, j), esta função explicarei por partes... vamos lá... j = j or 0 p = i or 0 Se a var j existir, ela recebe o próprio valor ou, caso contrário, ela receberá o valor de 0. Já no caso da var p, se a var i existir, ela recebe o valor de i ou, caso contrário, ela receberá o valor de 0. if p > config.rX then p = 0 j = j < config.rY -1 and j + 1 or false end Se a var p for maior do que a var config.rX (acredito que seja o raio em x) então a var p vai receber 0. Depois se a var j for menor ou igual a var config.rY - 1 (acredito que seja o raio em y reduzido em 1), a var j recebe o próprio valor acrescentado de 1, caso contrário recebe o valor booleano false. if j then posi = {x = pos.x + ( p * config.distX), y = pos.y + (j * config.distY), z = pos.z} if check_disponivel(posi) then doTeleportThing(cid, posi) countdown({{x = posi.x + 1, y = posi.y - 1, z = posi.z}, {x = posi.x - 1 , y = posi.y - 1, z = posi.z}} ) else fazQualquerCoisa(p + 1, j) end end Se j existir e não for false (caso não tenha entendido como ele possa ter o valor false, ver explicação anterior), então a var posi vai receber a seguinte posição: coordenada x vai receber a variável pos.x somado da var p vezes a var config.distX (lembrando que irá multiplicar para depois somar). Com a coordenada y vai acontecer a mesma coisa, porém será a var j multiplicado pela config.distY ao invés da var p multiplicada pela var config.distX. A coordenada z vai receber a coordenada z da var pos. Se estiver disponível a pos da var posi (explicado anteriormente na function check_disponivel(posi)) então irá teleportar o player para a posi e executar o countdown (explicado anteriormente). Em countdown({{x = posi.x + 1, y = posi.y - 1, z = posi.z}, {x = posi.x - 1 , y = posi.y - 1, z = posi.z}} ) ele manda para a function countdown as posições superior direita e superior esquerda, respectivamente, de onde o player será teleportado., caso contrário, irá repetir a function fazQualquerCoisa. Nesta parte de repetir a function fazQualquerCoisa eu não entendi, pois ele manda a var p+1 aonde ele recebe o parâmetro cid e o j aonde recebe o parâmetro i, creio que o correto seria fazQualquerCoisa(cid, p + 1, j), mas enfim, o código destrinchado é este, agora vou falar para o que imagino que seja. Function fazQualquerCoisa(cid, i, j) completa abaixo: function fazQualquerCoisa(cid, i, j) -- recursao caudal j = j or 0 p = i or 0 if p > config.rX then p = 0 j = j < config.rY -1 and j + 1 or false end if j then posi = {x = pos.x + ( p * config.distX), y = pos.y + (j * config.distY), z = pos.z} if check_disponivel(posi) then doTeleportThing(cid, posi) countdown({{x = posi.x + 1, y = posi.y - 1, z = posi.z}, {x = posi.x - 1 , y = posi.y - 1, z = posi.z}} ) else fazQualquerCoisa(p + 1, j) end end end Para o que acho que foi feito este script irei postar em breve, tenho que almoçar primeiro asuhashuasuh. Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1674978 Compartilhar em outros sites More sharing options...
JG6 44 Postado Novembro 5, 2015 Share Postado Novembro 5, 2015 Vamo lá vou chutar não manjo nada de script mais vo tentar, isso faz quando vc pisar em algum tile ele veja se o lugar configurado esteja vazio se sim teleporta o player até lá e sumona algum monstro acho q é isso Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1674983 Compartilhar em outros sites More sharing options...
Night Wolf 285 Postado Novembro 5, 2015 Autor Share Postado Novembro 5, 2015 creio que o correto seria fazQualquerCoisa(cid, p + 1, j) você tem razão, é que eu fiz o código correndo porque tinha esquecido disso daqui e acabei esquecendo de passar esse parâmetro. Vou editar, vlw Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1674985 Compartilhar em outros sites More sharing options...
Antharaz 93 Postado Novembro 5, 2015 Share Postado Novembro 5, 2015 Vamos la, pelo que vi ele roda toda uma area a partir da var pos variando distX em X e distY em y, dentro de um range rX para x e rY para y, a primeura dessas pos onde estiver disponivel para teleportar o player ele teleportará e criará os monstros após a contagem regressiva. Minha opinião é qie este é um script para sala de trainers. Estou no celular pq por algum motivo este tópico não abre no meu pc, se tiver algum erro de digitação releve. E ae, acertei? Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1674992 Compartilhar em outros sites More sharing options...
Night Wolf 285 Postado Novembro 5, 2015 Autor Share Postado Novembro 5, 2015 @@Antharaz, acertou parcialmente.. ele não roda uma área haha ficaria muito custoso Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1674993 Compartilhar em outros sites More sharing options...
Antharaz 93 Postado Novembro 5, 2015 Share Postado Novembro 5, 2015 Oxi roda sim, soh q variando a pos em distX e distY ate achaf uma pos valida .-. Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1674994 Compartilhar em outros sites More sharing options...
Night Wolf 285 Postado Novembro 5, 2015 Autor Share Postado Novembro 5, 2015 se vc fizer 1 desenho exemplificando como ele busca a área e me falar oque essa área representa eu digo que vc venceu, justo? Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1674996 Compartilhar em outros sites More sharing options...
Antharaz 93 Postado Novembro 5, 2015 Share Postado Novembro 5, 2015 Ok, mas terei de fazer pelo celular pq no pc n abre este topico n sei pq. local config = { distX=3; distY=3; rY=15; rY=15 } local pos = {x=147,y=300,z=7} Assim ele rodará uma área de 15 em x e y saindo a partir da pos inicial variando de x em 3 e y em 3. As posiçoes verificadas serao: {x=147,y=300,z=7} {x=147,y=300,z=7} {x=147,y=300,z=7} Apertei o responder do celular sem qrer, estou terminando de ppstar as pos Falei errado e.e o rx e o ry eh o numero de repetiçoes em x e y para achar a pos, eu li o codigo errado antes hahahah e.e tnc Seguindo este exemplo acima as pos serao: {x =147, y = 300, z = 7} {x =150, y = 300, z = 7} {x =153, y = 300, z = 7} {x =156, y = 300, z = 7} {x =159, y = 300, z = 7} {x =162, y = 300, z = 7} {x =165, y = 300, z = 7} {x =168, y = 300, z = 7} {x =171, y = 300, z = 7} {x =174, y = 300, z = 7} {x =177, y = 300, z = 7} {x =180, y = 300, z = 7} {x =183, y = 300, z = 7} {x =186, y = 300, z = 7} {x =189, y = 300, z = 7} {x =192, y = 300, z = 7} {x =147, y = 303, z = 7} {x =150, y = 303, z = 7} {x =153, y = 303, z = 7} {x =156, y = 303, z = 7} {x =159, y = 303, z = 7} {x =162, y = 303, z = 7} {x =165, y = 303, z = 7} {x =168, y = 303, z = 7} {x =171, y = 303, z = 7} {x =174, y = 303, z = 7} {x =177, y = 303, z = 7} {x =180, y = 303, z = 7} {x =183, y = 303, z = 7} {x =186, y = 303, z = 7} {x =189, y = 303, z = 7} {x =192, y = 303, z = 7} {x =147, y = 306, z = 7} {x =150, y = 306, z = 7} {x =153, y = 306, z = 7} {x =156, y = 306, z = 7} {x =159, y = 306, z = 7} {x =162, y = 306, z = 7} {x =165, y = 306, z = 7} {x =168, y = 306, z = 7} {x =171, y = 306, z = 7} {x =174, y = 306, z = 7} {x =177, y = 306, z = 7} {x =180, y = 306, z = 7} {x =183, y = 306, z = 7} {x =186, y = 306, z = 7} {x =189, y = 306, z = 7} {x =192, y = 306, z = 7} {x =147, y = 309, z = 7} {x =150, y = 309, z = 7} {x =153, y = 309, z = 7} {x =156, y = 309, z = 7} {x =159, y = 309, z = 7} {x =162, y = 309, z = 7} {x =165, y = 309, z = 7} {x =168, y = 309, z = 7} {x =171, y = 309, z = 7} {x =174, y = 309, z = 7} {x =177, y = 309, z = 7} {x =180, y = 309, z = 7} {x =183, y = 309, z = 7} {x =186, y = 309, z = 7} {x =189, y = 309, z = 7} {x =192, y = 309, z = 7} {x =147, y = 312, z = 7} {x =150, y = 312, z = 7} {x =153, y = 312, z = 7} {x =156, y = 312, z = 7} {x =159, y = 312, z = 7} {x =162, y = 312, z = 7} {x =165, y = 312, z = 7} {x =168, y = 312, z = 7} {x =171, y = 312, z = 7} {x =174, y = 312, z = 7} {x =177, y = 312, z = 7} {x =180, y = 312, z = 7} {x =183, y = 312, z = 7} {x =186, y = 312, z = 7} {x =189, y = 312, z = 7} {x =192, y = 312, z = 7} {x =147, y = 315, z = 7} {x =150, y = 315, z = 7} {x =153, y = 315, z = 7} {x =156, y = 315, z = 7} {x =159, y = 315, z = 7} {x =162, y = 315, z = 7} {x =165, y = 315, z = 7} {x =168, y = 315, z = 7} {x =171, y = 315, z = 7} {x =174, y = 315, z = 7} {x =177, y = 315, z = 7} {x =180, y = 315, z = 7} {x =183, y = 315, z = 7} {x =186, y = 315, z = 7} {x =189, y = 315, z = 7} {x =192, y = 315, z = 7} {x =147, y = 318, z = 7} {x =150, y = 318, z = 7} {x =153, y = 318, z = 7} {x =156, y = 318, z = 7} {x =159, y = 318, z = 7} {x =162, y = 318, z = 7} {x =165, y = 318, z = 7} {x =168, y = 318, z = 7} {x =171, y = 318, z = 7} {x =174, y = 318, z = 7} {x =177, y = 318, z = 7} {x =180, y = 318, z = 7} {x =183, y = 318, z = 7} {x =186, y = 318, z = 7} {x =189, y = 318, z = 7} {x =192, y = 318, z = 7} {x =147, y = 321, z = 7} {x =150, y = 321, z = 7} {x =153, y = 321, z = 7} {x =156, y = 321, z = 7} {x =159, y = 321, z = 7} {x =162, y = 321, z = 7} {x =165, y = 321, z = 7} {x =168, y = 321, z = 7} {x =171, y = 321, z = 7} {x =174, y = 321, z = 7} {x =177, y = 321, z = 7} {x =180, y = 321, z = 7} {x =183, y = 321, z = 7} {x =186, y = 321, z = 7} {x =189, y = 321, z = 7} {x =192, y = 321, z = 7} {x =147, y = 324, z = 7} {x =150, y = 324, z = 7} {x =153, y = 324, z = 7} {x =156, y = 324, z = 7} {x =159, y = 324, z = 7} {x =162, y = 324, z = 7} {x =165, y = 324, z = 7} {x =168, y = 324, z = 7} {x =171, y = 324, z = 7} {x =174, y = 324, z = 7} {x =177, y = 324, z = 7} {x =180, y = 324, z = 7} {x =183, y = 324, z = 7} {x =186, y = 324, z = 7} {x =189, y = 324, z = 7} {x =192, y = 324, z = 7} {x =147, y = 327, z = 7} {x =150, y = 327, z = 7} {x =153, y = 327, z = 7} {x =156, y = 327, z = 7} {x =159, y = 327, z = 7} {x =162, y = 327, z = 7} {x =165, y = 327, z = 7} {x =168, y = 327, z = 7} {x =171, y = 327, z = 7} {x =174, y = 327, z = 7} {x =177, y = 327, z = 7} {x =180, y = 327, z = 7} {x =183, y = 327, z = 7} {x =186, y = 327, z = 7} {x =189, y = 327, z = 7} {x =192, y = 327, z = 7} {x =147, y = 330, z = 7} {x =150, y = 330, z = 7} {x =153, y = 330, z = 7} {x =156, y = 330, z = 7} {x =159, y = 330, z = 7} {x =162, y = 330, z = 7} {x =165, y = 330, z = 7} {x =168, y = 330, z = 7} {x =171, y = 330, z = 7} {x =174, y = 330, z = 7} {x =177, y = 330, z = 7} {x =180, y = 330, z = 7} {x =183, y = 330, z = 7} {x =186, y = 330, z = 7} {x =189, y = 330, z = 7} {x =192, y = 330, z = 7} {x =147, y = 333, z = 7} {x =150, y = 333, z = 7} {x =153, y = 333, z = 7} {x =156, y = 333, z = 7} {x =159, y = 333, z = 7} {x =162, y = 333, z = 7} {x =165, y = 333, z = 7} {x =168, y = 333, z = 7} {x =171, y = 333, z = 7} {x =174, y = 333, z = 7} {x =177, y = 333, z = 7} {x =180, y = 333, z = 7} {x =183, y = 333, z = 7} {x =186, y = 333, z = 7} {x =189, y = 333, z = 7} {x =192, y = 333, z = 7} {x =147, y = 336, z = 7} {x =150, y = 336, z = 7} {x =153, y = 336, z = 7} {x =156, y = 336, z = 7} {x =159, y = 336, z = 7} {x =162, y = 336, z = 7} {x =165, y = 336, z = 7} {x =168, y = 336, z = 7} {x =171, y = 336, z = 7} {x =174, y = 336, z = 7} {x =177, y = 336, z = 7} {x =180, y = 336, z = 7} {x =183, y = 336, z = 7} {x =186, y = 336, z = 7} {x =189, y = 336, z = 7} {x =192, y = 336, z = 7} {x =147, y = 339, z = 7} {x =150, y = 339, z = 7} {x =153, y = 339, z = 7} {x =156, y = 339, z = 7} {x =159, y = 339, z = 7} {x =162, y = 339, z = 7} {x =165, y = 339, z = 7} {x =168, y = 339, z = 7} {x =171, y = 339, z = 7} {x =174, y = 339, z = 7} {x =177, y = 339, z = 7} {x =180, y = 339, z = 7} {x =183, y = 339, z = 7} {x =186, y = 339, z = 7} {x =189, y = 339, z = 7} {x =192, y = 339, z = 7} {x =147, y = 342, z = 7} {x =150, y = 342, z = 7} {x =153, y = 342, z = 7} {x =156, y = 342, z = 7} {x =159, y = 342, z = 7} {x =162, y = 342, z = 7} {x =165, y = 342, z = 7} {x =168, y = 342, z = 7} {x =171, y = 342, z = 7} {x =174, y = 342, z = 7} {x =177, y = 342, z = 7} {x =180, y = 342, z = 7} {x =183, y = 342, z = 7} {x =186, y = 342, z = 7} {x =189, y = 342, z = 7} {x =192, y = 342, z = 7} Na proxima vez irei ler sem pressa kkk Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1674999 Compartilhar em outros sites More sharing options...
Adm Andrey 2 Postado Novembro 5, 2015 Share Postado Novembro 5, 2015 bom chutando axo que isso e para criar um tp para augo por 5minutos shuhsu Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1675026 Compartilhar em outros sites More sharing options...
BananaFight 196 Postado Novembro 5, 2015 Share Postado Novembro 5, 2015 (editado) Pelo que entendi é um script que adiciona o player em uma posição + monstros baseada na quantidade de "salas" disponíveis, Ou seja, seria como um teleportador de players para trainers, ele vai pegar a quantidade total de salas disponíveis, e vai tentar 1 a 1 usando os cálculos do código, vai contar o tempo configurado no sistema, e depois vai adicionar os monstros. - Posição da primeira sala local position = {x = 160, y = 154, z = 7} -- posição do que? - Começa a verificar cada sala a partir da quantidade de vezes que executou a recursividade, caso encontre uma sala disponível, teleporta o player para ela, e inicia a contagem de tempo e criar os monstros function fazQualquerCoisa(cid, pos, i, j) -- recursao caudal j = j or 0 p = i or 0 if p >= config.rX then p = 0 j = j < config.rY -1 and j + 1 or false end if j then posi = {x = pos.x + ( p * config.distX), y = pos.y + (j * config.distY), z = pos.z} if check_disponivel(posi) then doTeleportThing(cid, posi) countdown({{x = posi.x + 1, y = posi.y - 1, z = posi.z}, {x = posi.x - 1 , y = posi.y - 1, z = posi.z}} ) else fazQualquerCoisa(cid, pos, p + 1, j) end end end Verifica a disponibilidade da sala em questão, para saber se já esta ocupada ou não. function check_disponivel(npos) if disponivel(npos) then return true end return false end Começa a contagem regressiva de ( 5 até 0 ), quando chegar no numero ( 0 Visual no jogo, e 5 no código ), ele cria o monstro verificando se a sala esta ocupada ( para saber se o player ainda esta nela provavelmente ) Editado Novembro 5, 2015 por BananaFight Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1675027 Compartilhar em outros sites More sharing options...
Night Wolf 285 Postado Novembro 5, 2015 Autor Share Postado Novembro 5, 2015 @BananaFight e @Antharaz acertaram, vcs foram bem ligeirinhos.. pensei que o povo ia demorar alguns dias pra acertar esse :~ preciso começar a pensar em scripts mais dificeis haha. Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1675029 Compartilhar em outros sites More sharing options...
BananaFight 196 Postado Novembro 6, 2015 Share Postado Novembro 6, 2015 (editado) Você poderia por scripts sem erros, consigo apontar no minimo 5 erros que causariam bugs críticos para esse seu sistema, sem contar que existem jeitos melhores de se aumentarem a performasse do sistema. Por exemplo: O que esse sistema faz ? tabela = {} local num = 0 for x = 1, 5 do for y = 1, 5 do num = num + 1 if (num % 2) ~= 0 then table.insert(tabela, num) end end end Editado Novembro 6, 2015 por BananaFight Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1675045 Compartilhar em outros sites More sharing options...
Night Wolf 285 Postado Novembro 6, 2015 Autor Share Postado Novembro 6, 2015 roda 25 vezes num = num +1 e checa se ele não é divisivel por 2 pra inserí-lo numa tabela.. e isso é só um jeito q eu pensei de fazer esse código, se eu levei mais de 2 minutos escrevendo isso foi muito. Depois qnd eu for passar pra código mesmo eu optimizo Link para o comentário https://xtibia.com/forum/topic/237715-desafio-do-m%C3%AAs-02/#findComment-1675051 Compartilhar em outros sites More sharing options...
Posts Recomendados