Jump to content

Search the Community

Showing results for tags 'pejuge'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • OpenTibia
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
    • Divulgação de Servidores
    • Projetos e Formações de Equipes
  • Outros
    • Design

Found 4 results

  1. Conceitos de Aleatório

    Aleatório Olá, estou a um tempo parado e decidi postar este tutorial conceitual. O objetivo hoje é explicar como funciona a função math.random(...) em lua. O que é aleatório? Por conceito aleatório é aquilo que é escolhido independente de qualquer valor, ao acaso. Aplicação? Na prática, não existe aplicação exata ao conceito, entretanto, utilizamos fórmulas matemáticas para gerar valores que fogem um pouco do controle do usuário. Quando se utiliza math.random por exemplo, você está pedindo para a máquina gerar um número, definirei portanto esta atitude como semi-aleatória. Por que semi-aleatório? Simples, quando você utiliza math.random, o computador gera um número através de uma base que foi fornecida, às vezes sem sua percepção, é a denominada semente. Semente? Planta? O conceito utilizado requer um pouco de imaginação para compreensão. Imagine que você planta uma semente de caju, daqui algum tempos a árvore crescerá, e você poderá colher os frutos. Com math.random também é assim, você define o valor de base, este valor vai dar origem a vários outros valores. O ser humano tem a capacidade de tomar múltiplas decisões? Não, ao menos não do ponto de vista matemático. As decisões são tomadas de acordo com as experiências que este acumulou e com o momento em que ele está, sendo importantes as variáveis do ambiente, pensemos na natureza como um computador gigantesco e de alta performance. OtServer Quando um OT inicia, a semente que eu citei anteriormente, é semada logo na inicialização, por isso os scripts não precisam utilizá-lo. Quando um .lua é criado separadamente, caso não se semeie os resultados serão sempre iguais. Resumo - Não entendeu? Leia o resumo... Sempre que você utiliza math.random, o computador gera um número de acordo com a base definida por math.randomseed. Obrigado por lerem o tópico. Atenciosamente, Pedro Silva Moreira - PeJuGe. Gostou? Clique no link do meu projeto \/.
  2. Par ou Impar? 4 Funções

    PON - Par, Impar ou Não numeral? 2 Funções Olá a todos novamente, depois de algum tempo sem postar (o vício no jogo estava muito), voltei com toda força =D. Neste Tutorial simples e rápido demonstrarei duas funções simples criadas por mim (o título está incorreto na visualização antes de entrar, não sei o motivo), como gosto de dar nome aos meus scripts, estes se chamarão PON (Par, Ímpar ou Não numeral), isPON(param) - é par, ímpar ou não numeral? - e PONQtd(table, value) - quantos de pares, ímpares ou não números? - caso já existam estas funções favor postar neste tutorial. Pretendo criar um script com elas (aguardem =D). :fun::style::pirate: Obs.: Ao final disponibilizarei o download e o modo de instalação. Os scripts scripts de ímpares estão feitos baseados nos pares, pois em caso de necessitar mudanças é mais facil. A função isPON: Esta Função é bem simples, ela determina se um número é par ou ímpar. Aí está: Bom, utilizei um recurso muito simples, o módulo (%). Para quem desejar saber mais sobre este e outros recursos recomendo este tutorial: [Hidden Content] , iniciei meus estudos com estas aulas e são de grande auxílio, será facil compreender o script com elas (principalmente a do link). Você deve estar se perguntando, o que é esse negócio de param? Bem simples hehe :loool:. Ele é o conteúdo analizado, geralmente o número de uma tabela. A seguir um exemplo prático: A função PONQtd: Note que neste caso utilizei table ao invés de param pois não há sentido escrever milhões de números para posterior avaliação, o mais comum é avaliação de tabelas. Ok, mas o que é esse negócio de value? Simples, hehe :said::pirate::laugh::ras: (nem gosto de emoticons), é um parâmetro "extra" (necessário colocá-lo), coloque nele "pair" para que se obtenha a quantidade de números pares, "odd" para os ímpares ou "not number" para não números. A seguir um exemplo: Download: Script: [Hidden Content] ou Impar.lua Instalação: Para instalar, é simples, basta colar o arquivo na pasta lib(...\lib) e colar isto: dofile(getDataDir() .. "lib/Par ou Impar.lua") em data.lua(...\lib\data.lua). Lembre-se para no caso de mudar o nome do arquivo mudar o texto em negrito preto. Obrigado: Agradeço por ter lido meu tópico e espero ter ajudado, aguardem o script prometido ^^. Aguardo comentários hehe :w00t:
  3. S.O.M.A System of Matrixes Autor: PeJuGe Comentário: [spoiler=Comentário]Este sistema é uma exclusividade OTNet (como todos os meus scripts até o instante) e busca a implementação de matrizes em Lua por meio da utilização de funções básicas. Como são 14 Funções não explicarei-as passo-a-passo, apenas postarei o script. Caso tenha alguma dúvida consulte o índice no início do script, em caso de persistência da dúvida poste-a abaixo. Script: --[[ PeJuGe(2010) . S.O.M.A 1.0 ~ System of Matrix DON'T REMOVE THE CREDITS Exclusive For www.otserv.com.br More Info: [Hidden Content] + matrix.correct(m) * Returnes true for correct matrix or false. + matrix.sqr(m) * Returns true for square matrix or false. + matrix.lines(m) * Returns the number of lines. + matrix.columns(m) * Returns the number of columns. + matrix.addline(l1, l2) * Returns the added lines. + matrix.column(m, n) * Returns the selected column. + matrix.reverse(m) * Returns reversed matrix. + matrix.addline(l1, l2) * Returns the sun of l1 and l2. + matrix.addcolunm(m1, n1, m2, n2) * Returns the sun of columns n1 from m1 and n2 from m2. + matrix.add * Returns the sun of matrixes. + matrix.mulline(l1, l2) * Returns the multiplication of l1 and l2. + matrix.mul(m1, m2) * Returns multiplicated matrixes. + matrix.concat(m) * Returns concated matrix. + matrix.det(m) * Returns the det of matrix (At moment alone smaller or equal than 3). ]]-- local matrix = {} function matrix.correct(m, r) r = r or 1 return #m >= r and #m[r] == #m[1] and matrix.correct(m, r + 1) or #m < r end function matrix.sqr(m) return matrix.correct(m) and #m == #m[1] and #m end function matrix.lines(m) return matrix.correct(m) and #m end function matrix.columns(m) return matrix.correct(m) and #m[1] end function matrix.column(m, n, r) r = r or {} r[#r + 1] = m[#r + 1][n] return #r == #m and r or matrix.column(m, n, r) end function matrix.reverse(m, r) r = r or {} r[#r + 1] = matrix.column(m, #r + 1) return #r == #m[1] and r or matrix.reverse(m, r) end function matrix.addline(l1, l2, r) r = r or {} r[#r + 1] = l1[#r + 1] + l2[#r + 1] return #l1 == #r and r or matrix.addline(l1, l2, r) end function matrix.addcolumn(m1, n1, m2, n2, r) return matrix.addline(matrix.column(m1, n1), matrix.column(m2, n2)) end function matrix.add(m1, m2, r) r = r or {} r[#r + 1] = matrix.addline(m1[#r + 1], m2[#r + 1]) return #m1 == #r and r or matrix.sun(m1, m2, r) end function matrix.mulline(l1, l2, r) r = r or {0, 0} r[1], r[2] = r[1] + l1[r[2] + 1] * l2[r[2] + 1], r[2] + 1 return r[2] == #l1 and r[1] or matrix.mulline(l1, l2, r) end function matrix.mul(m1, m2, r, n) m2, r, n = not r and matrix.reverse(m2) or m2, r or {}, n or 1 r[#r + 1] = n ~= #r and {} or nil r[#r][#r[#r] + 1] = matrix.mulline(m1[#r], m2[#r[#r] + 1]) n = #m2 == #r[#r] and n + 1 or n return n > #m1 and r or matrix.mul(m1, m2, r, n) end function matrix.concat(m, r) r = r or {} r[#r + 1] = table.concat(m[#r + 1], " ") return #m == #r and table.concat(r, "\n") or matrix.concat(m, r) end function matrix.det(m) sqr = matrix.sqr(m) return matrix.sqr and ( sqr == 1 and m[1][1] or sqr == 2 and m[1][1] * m[2][2] - m[1][2] * m[2][1] or sqr == 3 and m[1][1] * m[2][2] * m[3][3] + m[1][2] * m[2][3] * m[3][1] + m[1][3] * m[2][1] * m[3][2] - (m[3][1] * m[2][2] * m[1][3] + m[3][2] * m[2][3] * m[1][1] + m[3][3] * m[2][1] * m[1][2]) or false) or false end Construindo uma matriz: Coloque as uma tabela para a matriz, sendo que cada linha é representada por uma tabela única: local matrix = { --> matriz quadrada {2, 3}, {9, 8} } local matrix2 = { -- > matriz não quadrada {2, 3, 4}, {1, 54, 9} } local matrix3 = { -- > matrix inexistente {3, 1, 2}, {1}, {13, 2} } --Observe como coletar dados print(matrix[1][1]) --> 2 print(matrix[1][2]) -- > 3 print(matrix[2][1]) -- > 9 print(matrix[2][2]) -- > 8 Deste modo segue o padrão Aij com A[j] (quem conhece matemática sabe do que estou falando). Fico devendo nessa Lib determinação de det para tabelas de ordem maior que quatro. Há ainda a utilização de matrizes com sistemas lineares... Obrigado por ler meu tópico, caso haja alguma dúvida, reclamação ou sugestão favor postar abaixo. Atenciosamente, PeJuGe.
  4. 7 Funções

    7 Funções Autor: PeJuGe Comentário: [spoiler=Comentário]Estas são funções que eu já postei em sua maioria e estou postando novamente mas agora melhoradas, sendo nova apenas math.factorial. Não explicarei, apenas postarei o script. Caso tenha alguma dúvida consulte o índice no início do script, em caso de persistência da dúvida poste-a abaixo. Script: --[[ PeJuGe(2010) . 7 Funções DON'T REMOVE THE CREDITS Exclusive For www.otserv.com.br More Info: [Hidden Content] + string.toup(txt) * Returns the first letter upped. + getlocation(table, m) * Returns the location of a value in a table + math.textreme(table, value) * Returns the maximum and minimum value + math.multiple(value, param) * Returns true or false + math.tmultiple(table, param) * Returns the multiples of param from table + math.approx(value) * Returns the nearest number + math.factorial(value) * Returns the factored number ]]-- function string.toup(txt) return string.upper(txt:sub(1, 1)) .. txt:sub(2) end function getlocation(table, m, r) r = r or 1 return #table >= r and table[r] ~= m and getlocation(table, m, r + 1) or table[r] == m and r end function math.textreme(table, value, r) r = r or {math.huge, -math.huge, 1} r[1], r[2], r[3] = table[r[3]] < r[1] and table[r[3]] or r[1], table[r[3]] > r[1] and table[r[3]] or r[2], r[3] + 1 return r[3] == #table + 1 and {min = r[1], max = r[2]} or math.textreme(table, value, r) end function math.multiple(value, param) return value % param == 0 end function math.tmultiple(table, param, r) r = r or {{}, 1} r[1][#r[1] + 1], r[2] = math.multiple(table[r[2]], param) and table[r[2]] or nil, r[2] + 1 return r[2] == #table + 1 and r[1] or math.tmultiple(table, param, r) end function math.approx(value) return math.floor(value + 0.5) > math.floor(value) and math.ceil(value) or math.floor(value) end function math.factorial(n) return math.floor(n) > 1 and (math.floor(n) * math.factorial (n-1)) or 1 end Bom, obrigado por ler meu tópico. Caso tenha alguma dúvida, reclamação ou sugestão, favor postar abaixo, pois sua dúvida pode pertencer também a outra pessoa. Atenciosamente, PeJuGe
×