Ir para conteúdo
  • Cadastre-se

MaXwEllDeN

Héroi
  • Total de itens

    1185
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Histórico de Curtidas

  1. Obrigado
    MaXwEllDeN recebeu reputação de unf4ced em Aulas de Scripting Lua   
    Quer aprender a programar em Lua? Sugiro que você comece olhando esses tutoriais escritos por Urso Mock, Suricato Notorious e Raposa Skyen Hasus.
    Já leu todas as aulas anteriores e acha que você já está apto a criar seus próprios Scripts? Boa! Agora é hora de por suas habilidades em prática. Leia esses tutoriais:
    Outros Tutoriais:
     
     
    Avançado:
  2. Gostei
    MaXwEllDeN recebeu reputação de B i e LL em (Resolvido)[Script] Npc Teleport   
    local DESTINO = {x = 160, y = 54, z = 7} -- POSIÇÃO DE DESTINO local SAFFRON = {x = 160, y = 54, z = 7} -- POSIÇÃO DE Saffron   local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler)   function onCreatureAppear(cid)         npcHandler:onCreatureAppear(cid)         end function onCreatureDisappear(cid)      npcHandler:onCreatureDisappear(cid)         end function onCreatureSay(cid, type, msg)   npcHandler:onCreatureSay(cid, type, msg:lower())   end function onThink()                  npcHandler:onThink()                  end local talkState = {}   function creatureSayCallback(cid, type, msg)    if(not npcHandler:isFocused(cid)) then       return false    end      local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid      if msgcontains(msg, "sim") or msgcontains(msg, "yes") then       selfSay("Aí está!", cid)       doSendMagicEffect(getThingPos(cid), 10)       npcHandler:releaseFocus(cid)       doTeleportThing(cid, DESTINO)       doSendMagicEffect(DESTINO, 10)    elseif msgcontains(msg, "nao") or msgcontains(msg, "no") then       selfSay("Aí está!", cid)       doSendMagicEffect(getThingPos(cid), 10)       npcHandler:releaseFocus(cid)       doTeleportThing(cid, SAFFRON)       doSendMagicEffect(SAFFRON, 10)    end      return true end     npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Amigo, aprenda a usar vírgulas. Por causa da falta delas não entendi bem o que você queria.
  3. Gostei
    MaXwEllDeN recebeu reputação de BreNiinxz em [Aula 9] Tabelas   
    << Aula 8 - while & repeat
    Essa aula foi escrita por um suricato Notorious, todos os créditos pertencem à ele.
    Tabelas
    Aula 9
    #Introdução
    Olá, nessa aula vamos conhecer um elemento que facilita muito a vida de programadores, principalmente quando se trata de um código com muitas variáveis e operações, as tabelas!
    Imagine uma tabela como se fosse uma estante com várias gavetas, quantas você desejar, dentro de cada gaveta tem um objeto, temos a gaveta um, a gaveta dois, e assim em diante ... podemos guardar objetos dentro de cada gaveta, tirar objetos delas e também saber o que tem dentro de cada uma, nessa analogia uma tabela é basicamente como se fosse essa estante.
    Uma tabela é uma variável estruturada que pode conter vários valores dispostos "dentro" de si (vide analogia), seu inicio é indicado por uma abertura de chave, ela pode conter inúmeros valores, de todos os tipos exceto nulo(nil), desde variáveis até strings, e dentro dela esses valores são separados por vírgulas (,), seu fim é indicado por um fechamento de chave.
    Essa definição pode ficar meio confusa aqui, mas garanto que ao longo da aula tudo vai se explicar.
    Exemplo:
      tb = {1, 2, 3, 4, 5} --> inteiros em uma tabela tb = {"hello", "world"} --> strings em uma tabela tb = {a = 2, b = 3} --> variáveis em uma tabela tb = {1, 2, 3, 4, 5} --> inteiros em uma tabela tb = {"hello", "world"} --> strings em uma tabela tb = {a = 2, b = 3} --> variáveis em uma tabela Como você pode perceber nos exemplos acima a declaração (criação) de uma tabela é semelhante a de uma variável comum, mas perceba que a estrutura é diferente, eu abri uma chave `{´ e dentro dessa chave comecei a colocar os valores que eu quero para cada posição na tabela, como se eu estivesse distribuindo-os nas "gavetinhas" 1, 2, etc, separados por vírgulas, é como se cada virgula indicasse que acaba uma gavetinha e começa outra, mas lembre-se só é permitido um valor em cada "gavetinha" e uma gavetinha não pode não ter valor ou ser nula, e no final ocorre um fechamento da chave `}´ que indica o fechamento/final da tabela. Através desses exemplos e definições percebemos uma coisa, uma tabela é uma variável comum, mas é como se pudessemos guardar vários valores dentro de uma variável só, dentro da tabela, ao invés de criarmos duas variáveis, porque não criamos uma tabela contendo os valores dessas duas variáveis.
     
    #Mas e então, qual é a vantagem de se usar tabelas?
     
    Além da organização e estruturação veremos mais pra frente jeitos de se manipular tabelas que farão com que seu código fique muito menor e mais prático com o uso delas, acompanhe ... #Agora vamos pra uma parte um pouco mais chatinha, preste atenção Tabelas contém indexes, o que é um index? Os indexes são chaves "primárias" às quais os valores da tabela são associados, todo valor em uma tabela exceto variáveis tem um index, o index se não definido por você é definido pela posição do valor na tabela, e eles tem a simples função de organização e identificação dos valores na tabela:
      tb = {2, 5, 4, 6} Sobre a tabela acima podemos afirmar que o valor 2 tem o index 1, mas porque? Pois como eu já falei o index é definido pela posição do valor na tabela, começando sempre do 1, então ele é o primeiro valor da tabela, tem a posição 1 E assim em diante, o valor 5 tem index 2, o 4 tem index 3, o 6 tem index 6 e sempre em diante ... Há também a opção de definir o index de um valor manualmente ao invés de simplesmente identifica-los pela posição na tabela, o que pode facilitar a associação de valores:
      --> [index] = valor tb = {2, 5, [15] = 30} Neste caso foi criada uma tabela, e para um de seus valores foi definido o index 15 manualmente, ou seja, o index do valor 2 é 1, e o do valor 5 é 2 (atribuidos pela posição), já para o valor 30 foi definido o index 15 manualmente, então o index do valor 30 é 15, e não 3 como seria normalmente ... #E como se pega os valores de uma tabela? Há dois meios de se pegar valores de dentro de uma tabela: Através do index do valor ou se a tabela contiver variáveis, através dos nomes das variáveis:
      t = {21, 23, 43, 54} t[2] --> esta sintaxe retornará o valor na tabela 't' no index 2, ou seja, 23 t[3] --> 43 t[4] --> 54 e assim por diante ... Para se obter valores de uma tabela através de variáveis inseridas nela é muito mais fácil:
      t = {level = 20, nome = "dragon"} t.level --> 20, 't' é a tabela e 'level' o nome da variável inserida nela t.nome --> "dragon" #A biblioteca 'table' Existem muitas funções dentro da biblioteca 'table', que são usadas para manipulação de tabelas, aqui vão elas e suas respectivas utilidades:
      table.concat (table [, sep [, i [, j]]]) --> Dada uma tabela onde todos os elementos são strings ou números retorna os elementos de i ou o inicio e j ou o fim concatenados em sequencia intercalados por 'sep', separador table.insert (table, [pos,] value) --> Insere o valor 'value' na 'pos' (index) na tabela 'table' table.remove (table [, pos]) --> Remove o valor associado ao index 'pos' da tabela 'table' table.sort (table [, comp]) --> Ordena os elementos da tabela 'table' em dada ordem, se comp é fornecido então ele deve ser uma função que recebe dois elementos da tabela e retorna true quando o primeiro é menor do que o segundo #E como uma tabela pode ser util no meu script? Pode ser útil na associação de valores, observe este script de troca de sexo, ao invés de dois ifs checando o sexo, como o sexo só pode ser 0 ou 1, você usa uma tabela:
      function onUse(cid) local sex = { [0] = 1, [1] = 0, } doPlayerSetSex(cid, sex[getPlayerSex(cid)]) return true end Se o sexo do jogador for 0, atraves do valor no index 0 na tabela, o sexo é trocado para 1, e vice-versa .. Como também pode ser útil para armazenar configurações ou variáveis:
      local config = { effect = 1, removeRune = true, combat = 2 } config.effect --> 1 config.removerune --> true config.combat --> 2 #Utilidades
    #Curiosidades
    Tabelas são o único mecanismo de estruturação de dados em Lua; Tabelas podem ser heterogêneas; isto é, elas podem conter valores de todos os tipos (exceto nil). Existem várias maneiras convenientes de se criar tabelas em Lua Campos de tabela podem conter funções *nil = tipo de valor nulo, vazio
     
     
    Gostou? Agradeça ...
    Exercício Crie uma tabela, contendo 2 valores inteiros, 2 strings e 2 variaveis. Printe os elementos semelhantes da tabela separadamente.
    OBS: Os valores podem ser aleatórios
     
     
    Aula escrita por um suricato Notorious, todos os créditos são dele.
    Aula 10 - O comando for >>
  4. Gostei
    MaXwEllDeN recebeu reputação de allanzinh em Aulas de Scripting Lua   
    Quer aprender a programar em Lua? Sugiro que você comece olhando esses tutoriais escritos por Urso Mock, Suricato Notorious e Raposa Skyen Hasus.
    Já leu todas as aulas anteriores e acha que você já está apto a criar seus próprios Scripts? Boa! Agora é hora de por suas habilidades em prática. Leia esses tutoriais:
    Outros Tutoriais:
     
     
    Avançado:
  5. Gostei
    MaXwEllDeN recebeu reputação de jhonathan wendrell em [Aula 1] Introdução   
    Introdução
    Aula 1
    O que é scripting?
    Do modo mais simples possível: scripting é o ato de programar. O nome scripting vem do nome "script".
    O que é um script?
    De um modo geral, um script é um bloco de código escrito em uma linguagem de programação interpretada, ou seja, ele precisa que alguma coisa leia ele e possa "traduzir" seu conteúdo. Lembre-se de que "script" não é um termo específico de Open Tibia Servers.
    O que é uma linguagem de programação interpretada?
    Os brasileiros falam português, ingleses falam inglês e chineses falam mandarim, e com isso o mundo é composto por várias línguas.
    No mundo da programação não é diferente. Existem várias línguas que podem ser usadas, cada uma com uma característica e modo de escrever diferente (Assim como o português é diferente do inglês).
    Entre estas linguagens, existem 2 tipos: as linguagens interpretadas e as linguagens compiladas (Não-interpretadas). Podemos fazer uma comparação tosca com a vida real: o português seria uma linguagem interpretada (Nosso cérebro precisa "traduzir" a mensagem), e os desenhos seriam a língua compilada (Nosso cérebro reconhece automaticamente a "mensagem" do desenho).
    As linguagens compiladas são aquelas que não precisam ser lidas por nenhum programa, pois "conversam" diretamente com o computador, enquando a linguagem interpretada não consegue se comunicar com o computador, então a linguagem compilada recebe a mensagem do codigo interpretado e traduz numa linguagem que o computador entenda, dai a linguagem interpretada pode conversar com o computador (Desde que alguém traduza suas mensagens).
    Voltando para a parte de Open Tibia Servers, a linguagem compilada é a linguagem usada no seu servidor: o .exe no Windows, por exemplo, e a linguagem interpretada são os scripts .lua. O seu servidor compilado vai ler os scripts .lua e traduzir o conteúdo deles para que o computador possa executar o que o script manda.
    Se os scripts são escritos em linguagens interpretadas, qual é a linguagem dos script usados nos Open Tibia Servers?
    Os Open Tibia Servers usam uma linguagem de programação (Interpretada) chamada Lua, que foi feita aqui no Brasil mesmo.
    Características da linguagem de programação Lua:
    Linguagem de Programação Interpretada Linguagem de Programação Imperativa ou Programação Procedural Linguagem de Scripts ou Linguagem de Extensão Pequena, Fácil, Leve e Eficiente " Lua foi criada por um time de desenvolvedores do Tecgraf da PUC-Rio, a princípio, para ser usada em um projeto da Petrobras. Devido à sua eficiência, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da programação, como no desenvolvimento de jogos (a LucasArts, por exemplo, usou a linguagem no jogo Escape from Monkey Island), controle de robôs, processamento de texto, etc. Também é freqüentemente usada como uma linguagem de propósito geral. "
    Wikipédia - Lua (Linguagem de Programação)
    O que eu preciso para aprender Lua e começar a produzir meus scripts?
    Paciência (Embora seja de fácil aprendizado, você vai levar algum tempo para aprender a linguagem)
      Humildade (Nunca se sinta o melhor, nem ridicularize aqueles que tiverem um conhecimento menor que o seu)
      Vontade (Não adianta fazer as coisas sem o menor interesse, você não chegará a lugar nenhum sem vontade)
      Criatividade (O principal para produzir um script é ter a idéia do que você vai fazer)
      Conhecer a Lógica da Programação (Não se preocupe, eu vou ensinar a Lógica da Programação nas próximas aulas.)
      Interpretador Lua (Para testar seus scripts, claro. Você pode usar o seu OTServer para testar, e ainda usar um interpretador Lua para testar seus scripts simples fora do OTServer)
      Editor Lua (Não é realmente necessário, uma vez que você pode usar um editor de textos qualquer, como o bloco de notas, mas ter um Editor Lua vai ajudar muito, e alguns até vêm com um Interpretador Lua junto!)
      Pagar uma taxa de R$ 700,00, afinal, não estou escrevendo estas aulas de graça! (OK, não precisa pagar nada, mas no mínimo poste seus scripts aqui e ajude a seção a crescer ) Onde posso encontrar um Interpretador e/ou Editor Lua?
    Como interpretador (No caso de produzir scripts para Open Tibia Servers) você deve usar um servidor próprio, pessoal somente para testar os scripts que você fez, e pode usar também um Interpretador Lua geral, para testar seus scripts fora dos OTServers.
    Como Editor Lua você pode usar qualquer editor de textos, mas eu recomendo usar um editor que seja próprio para a linguagem Lua. Existem dois editores que já vem com um Interpretador Lua "embutido". São eles: OTScript Live! [Download] e SciTE (Scintilla) [Download].
    Exercício-Tarefa:
    Pesquise mais na internet sobre a linguagem Lua, Scripts, etc...
    Somente dúvidas serão aceitas aqui! Comentários que não forem dúvidas serão apagados e os autores serão reportados!
    Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
    Aula 2 - Lógica da programação >> Script Live By colex.rar
  6. Obrigado
    MaXwEllDeN recebeu reputação de denisbts96 em [Aula 2] Lógica da Programaçao   
    << Aula 1 - Introdução
     
     
     
     
    Lógica da Programação
    Aula 2
     
     
     
     
    O que é a Lógica da Programação?
    Bem, tudo o que é escrito em alguma linguagem de programação deve seguir uma lógica para poder funcionar. Vamos pegar um exemplo simples e curto: Um script de SD. (Sudden Death Rune)
     
    Quando o script de SD for chamado (Alguém usou a SD), ela segue passos básicos, que é basicamente a execução dela. Primeiro o script vai verificar se quem usou a SD possui nível, magic level, etc... suficiente para poder usar a SD. Se não possuir opa! Ela vai enviar uma mensagem de erro ao jogador, um efeito de fumaça e vai encerrar a execução. Caso contrário: se for um jogador com todos os requerimentos básicos para usar uma SD, então o script vai verificar se o alvo é um Player ou Monstro. Se não for vai enviar uma mensagem de erro, efeito, e vai parar de executar. Se for um monstro ou player, então o script fará um efeito da SD atingindo o alvo, toda aquela piromancia louca, e então vai tirar o devido dano do jogador.
     
    Um pouco cansativo de ler tudo isso, mas observe o exemplo abaixo:
     
     
      Quando uma SD for usada, então faça: Verifique se o jogador que usou a SD possui nível igual ou maior que 45, e se possui nível mágico maior ou igual a 15. Se possuir, faça: Se o alvo da SD for um Monstro ou Jogador, então faça: Calcule o dano que causará ao alvo. Remova uma carga da SD. Execute o efeito de SD. Calcule o dano que causará ao alvo e execute-o no alvo, tirando a vida dele ou mana, no caso de o alvo estiver usando o Magic Shield (Utamo Vita). Mas se o alvo da SD não for um Monstro ou Jogador, então faça: Envie uma mensagem de erro ao jogador. Envie um efeito de fumaça na posição do jogador. Aqui termina a verificação se o alvo da SD é um Monstro ou Jogador, ou nenhum dos dois. Mas se o jogador não possuir estes requerimentos, então faça: Envie uma mensagem de erro ao jogador. Envie um efeito de fumaça na posição do jogador. Aqui termina a verificação se o jogador possui ou não os requerimentos. Aqui termina a execução da SD. Agora, depois deste algoritmo, talvez tenha ficado mais claro como os programas de computador funcionam. Tudo não passa de um processo lógico, onde a linguagem de programação só serve como uma "máscara" para que o programador escreva o código seguindo esta lógica, por isso é ultra importante saber a lógica da programação antes de começar a programar. O que é um Algoritmo? O "código" que eu escrevi acima (Dentro da caixa de texto) representando o uso da SD foi um algoritmo. Os algoritmos são formas de representar a lógica seguida pelo programa. São passos que o programa segue para atingir determinado objetivo ou em outras palavras, completar uma tarefa (No caso da SD, matar ou não o alvo, ou enviar uma mensagem de erro). Um exemplo de algoritmo são as operações matemáticas, como somar, dividir, multiplicar, subtrair... Quando você soma 2 mais 2, você está executando um algoritmo para ele atingir o objetivo (O resultado!!), que é 4. Um programa ou script é basicamente a escrita dos algoritmos em uma linguagem de programação que é executada pelo computador de forma lógica.
     
    Esta aula foi curta pois eu prefiro lhes ensinar as estruturas lógicas conforme ensino as mesmas em Lua, assim trabalhando a lógica e Lua ao mesmo tempo. Primeiro ensino como funciona a estrutura na Lógica e depois ensino como aplicar em Lua.
     
    Exercícios-Tarefa:
     
    1. Monte o algoritmo de um script de "Shovel (Pá)".
    2. Monte o algoritmo de um script de "Pedra que troca sexo".
    3. Monte o algoritmo de "Ir ao cinema".
    4. Monte o algoritmo de "Fazer bolo".
     
     
     
    Respostas: Só abra depois de ter tentado resolver os exercícios!
     
    Exercício 1:
     
     
     
    Exercício 2:
     
     
    Exercício 3:
     
     
    Exercício 4:
     
     
     
    OBS: Nota-se que já fiquei cansado nas respostas do exercício 3 e 4... 
     
    Aqui só serão aceitas dúvidas ou reporte de erros. Qualquer coisa que não se encaixe nesta descrição será apagado sem aviso.
     
    Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
     
     
    Aula 3 - Primeiros Passos >>
  7. Gostei
    MaXwEllDeN recebeu reputação de Cat em [Aula 4] Operadores e Bibliotecas   
    << Aula 3 - Primeiros Passos
     
     
     
     
    Operadores Aritméticos e Bibliotecas
     
     
     
     
    Aula 4
     
     
     
    Na aula anterior vimos como chamar funções e conhecemos as funções print e type. Nesta aula apenas vou reforçar a aula anterior ensinando as funções mais básicas e usadas que são nativas da linguagem Lua, ou seja, não são funções criadas para Open Tibia Server, e sim funções prontas que já estão incluídas na linguagem Lua, e vou ensinar também os operadores aritméticos. Vamos começar com eles.
     
    Os Operadores Aritméticos
     
    OBS: Você pode fazer seus testes no editor e interpretador Lua usando a função print para exibir os resultados.
     
    Enquanto você quiser mecher em Lua (Ou em qualquer outra linguagem de programação), você vai precisar fazer contas matemáticas, sejam elas contas simples como uma adição, ou até mesmo contas complexas, incluindo fórmulas e etc...
     
    Os operadores aritméticos funcionam exatamente como na matemática que você está acostumado na escola. Os operadores aritméticos que você provavelmente conhece (A não ser que esteja usando fraldas) são:
     
    Adição (+) Subtração (-) Multiplicação (*) Divisão (/)  
    O resultado será:
     
    OBS: Se este não for o resultado, procure a assistência técnica pois seu sistema operacional só pode ser pirateado.
     
    Existem mais 3 operadores aritméticos que você talvez não conheça. São eles:
     
    Módulo (%) Exponencição (^) Unário (-)  
    Vamos ver um por um:
     
    O Operador de Módulo (%):
    Este operador vai lhe dar o resto de uma divisão, por exemplo, o módulo de 3 por 2 é 1, pois 3 dividido por 2 dá 2 e sobra 1.
     
    print(3%2)  
    Resultado: 1
     
     O Operador de Exponencição (^):
    Este operador vai lhe dar o valor de uma potência, por exemplo, a potência de 3 por 2 é 9, pois 3 elevado a 2 dá 9.
     
    print(3^2)  
    Resultado: 9
     
      O Operador Unário (-):
    Este operador vai lhe dar o inverso de um valor, por exemplo, o inverso de 3 é -3, pois 3 vezes -1 dá -3.
     
    print(-3)  
    Resultado: -3
     
     Prioridades Aritméticas (( e )):
    Existem também as prioridades aritméticas, que devem ser definidas com ( para iniciar e ) para finalizar. Por exemplo:
     
    print(3+3*3) print((3+3)*3)  
     
    Resultado:
    12
    18 
     
    As Bibliotecas
     
    Vimos na aula anterior que existem vários tipos de dados, como por exemplo, strings e números. Assim como estes tipos, existem bibliotecas (Conjuntos de funções) para manipular estes tipos. Vamos conhecer as funções mais básicas das bibliotecas mais usadas.
     
    A Biblioteca Padrão:
    A biblioteca padrão não contém funções para manipular especificamente um tipo de dado, e sim o ambiente de programação. Suas funções mais básica, importantes e mais usadas são:
     
    Sintaxe: Modo correto de escrever o código.
    OBS: O que estiver entre [ e ] são argumentos opcionais, ou seja, você pode defini-los ou não. Quando houver três pontos (...) significa que você pode enviar quantos argumentos desejar.
     
    dofile(filename)
    Abre o arquivo e o executa como um bloco de código Lua. Ótima função para carregar bibliotecas criadas em Lua.
     
    print(···)
    Escreve uma ou mais frases no interpretador. Ótima para fazer testes. A função suporta todos os tipos de dados.
     
    tonumber(value [, base])
    Transforma um valor em número. Se não for possível converter, retorna 'nil'.
     
    tostring(value)
    Transforma um valor em string.
     
    type(value)
    Retorna o tipo de um valor.
     
    Todas as funções da biblioteca padrão!
     
     
     
    A Biblioteca Math:
    A biblioteca Math serve para manipular operações aritméticas, números, etc...
     
    math.ceil(x)
    Retorna um valor inteiro maior que x mais próximo de x. (Em outras palavras, arredonda para cima.)
     
    math.floor(x)
    Retorna um valor inteiro menor que x mais próximo de x. (Em outras palavras, arredonda para baixo.)
     
    math.random([m [, n]])
    Retorna um valor pseudo-randômico entre m e n baseado em uma semente (Um número que determina a sequência).
     
    math.randomseed(value)
    Altera a semente do pseudo-randomismo.
     
    Todas as funções da biblioteca math!
     
    A Biblioteca String:
    A biblioteca string manipula strings... :slap:
     
    string.gsub(s, pattern, repl [, n])
    Procura na string 's' por valores iguais à string 'pattern' e substitui pela string 'repl'.
     
    string.len(s)
    Esta função retorna o tamanho da string 's'.
     
    string.lower(s)
    Retorna a string 's' com as letras em minúsculas.
     
    string.upper(s)
    Retorna a string 's' com as letras em maiúsculas.
     
    string.rep(s, n)
    Retorna a string 's' repetida 'n' vezes.
     
    string.reverse(s)
    Retorna a string 's' ao contrário.
     
    string.sub(s, i [, j])
    Retorna a parte da string 's' entre as posições i e j.
     
    Todas as funções da biblioteca string!
     
    A Biblioteca OS:
    Esta biblioteca serve para pegar valores ou manipular o sistema operacional, como por exemplo, pegar a data.
     
    os.clock()
    Retorna o tempo de execução do script, em segundos...
     
    os.date([format [, time]])
    Retorna a data baseada no formato 'format'.
     
    os.time([table])
    Retorna um número correspondente à hora atual.
     
    Todas as funções da biblioteca OS!
     
    Outras Bibliotecas: (Avançado)
     
    Todas as funções da biblioteca Coroutine!
    Todas as funções da biblioteca Debug!
    Todas as funções da biblioteca Input/Output!
    Todas as funções da biblioteca Table!
     
    Exercícios:
    Pratique o uso das funções das bibliotecas math e string. (Y)
     
    Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
     
     
     
     
    Aula 5 - Variáveis e Comentários >>  
  8. Gostei
    MaXwEllDeN recebeu reputação de Cat em Por onde começar?   
    Obrigado por lembrar, acabei de postar novamente.
     
  9. Gostei
    MaXwEllDeN recebeu reputação de Ghaz em [Aula 3] Primeiros Passos   
    << Aula 2 - Lógica da programação
     
     
     
     
    Primeiros Passos
     
     
     
     
    Aula 3
     
     
     
    Relembrando o que eu disse na primeira aula, você precisará de um interpretador Lua e é muito recomendado que possua também um bom editor com suporte à sintaxe Lua, então nosso primeiro passo será obter o editor e o interpretador.
     
    As aulas serão voltadas ao scripting para Open Tibia Servers, então nada melhor do que um bom OTServer para testar seus scripts, mas ficar testando os scripts em um OTServer pode ser uma tarefa cansativa e demorada, então vamos usar também scripts fora de OTServers para praticar. Para isso, você pode fazer o download de qualquer um dos seguintes programas:
     
     
    Editores + Interpretadores:
    SciTE Scintilla [Avançado] OTScript Live! [Recomendado]  
    Editores:
     
    Notepad++  
    Interpretadores:
     
    Lua [Oficial]  
    Depois que você tiver seu editor e interpretador Lua (Recomendo o OTScript Live!), instale ele. No caso do OTScript Live!, depois de descompactar, vá em "Help", no menu, e clique em "Register To Lua". Abrirá uma caixa confirmando a alteração, basta apertar "OK" e todos os seus scripts irão abrir com o OTScript Live!.
     
    Testando seus scripts!
    No caso do SciTE, para testar o seu script você deve primeiro salvá-lo com a extensão Lua (*.lua). No caso do SciTE e do OTScript Live! você pode testar seu script apenas apertando F5, sendo que no OTScript Live! não é necessário salvar o script antes de testar.
     
    Após pressionar F5, o SciTE irá abrir uma área de textos abaixo da área de edição com as informações do teste, e o OTScript Live! vai abrir uma janela.
     
    Para testar se o seu SciTE ou OTScript Live! está funcionando, use o seguinte script:
     
     
      print("Hello world!") Nas informações mostradas pelo interpretador deve estar escrito "Hello world!". Se aparecer, parabéns, você testou o seu primeiro script Lua...  (ou não )
     
     
    O que o script fez? o0
     
    Uma das coisas mais importantes nos scripts são as funções. Uma função é "um bloco de código previamente pronto", uma subrotina, que quando chamada executa esse bloco. Imagine as funções como um atalho para executar alguma coisa. Pode ser usada, por exemplo, para encurtar scripts que tenham alguma parte do codigo que se repita muitas vezes. Criando uma função você pode usar esse código que se repete muitas vezes somente uma vez (Dentro da função), então em vez de usar esse bloco várias vezes, você só precisaria chamar a função várias vezes.
     
    Você pode criar suas próprias funções, mas isso veremos mais para frente. Tudo o que importa agora é aprender a chamar funções.
     
      O "Nome da Função", na verdade, é o nome da variável em que está armazenada a função, mas não se preocupem com isto ainda... O "Nome da Função" é o nome que você deve chamar para que a função ocorra, pois há vária funções (Obviamente), então você deve especificar qual função quer chamar. É a mesma coisa do que ter 3 pessoas. Quando quiser chamar uma das pessoas, deve dizer o nome dela.   Os argumentos são as "Respostas" para as "Perguntas" da função chamada. A maioria das funções faz "perguntas". No caso da função "print", ela nos "perguntou" o que queriamos escrever na tela, e "respondemos": "Hello world!".   É importante lembrar que cada pergunta deve ser respondida adequadamente, por exemplo, se alguém te pergunta: "Que horas são?" você não pode responder: "Sim.". A mesma coisa acontece com as funções, você deve responder exatamente o que ela está perguntando. Outra observação importante é que você deve responder as perguntas da função na ordem em que foram perguntadas. Se a pergunta nº 1 for "Que horas são?" e a nº 2 for "Quer um biscoito?", você deve responder respectivamente que horas são e se você quer um biscoito.     OBS: Algumas funções fazem "perguntas" opcionais, ou seja, você pode ou não responder. Se você não "responder", a própria função atribuirá um valor padrão para a resposta.   Os parâmetros são simplesmente o conjunto de todos os argumentos.   OBS: Todos os argumentos (Respostas) do parâmetro devem estar entre parênteses e ser separados por vírgulas!     Tipos de valores!   Bem, como eu disse, cada resposta deve seguir o tipo da pergunta, então vou citar aqui os tipos destes valores.   OBS: Existe uma função para descobrir o tipo de cada valor! Esta função é a função type(valor)...       Numbers   Como o nome diz, numbers são números, não há muito o que falar sobre eles...   Exemplo: print(1) print(2) print(3) OBS: A função print aceita todos os tipos como resposta.
     
    Strings  
    As strings devem iniciar com um símbolo especial e deve terminar com o mesmo caractere que foi usado para iniciar a string. Esses símbolos são:
     
    Apóstrofo: Começa com ' e termina com '.
    Aspas: Começa com " e termina com ".
    Colchete-Colchete: Começa com [[ e termina com ]].
    Colchete-Igual-Igual-Colchete: Começa com [==[ e termina com ]==].
     
    As strings são conjuntos de caracteres, como letras, números (Não são numbers, pois se houver um número entre os símbolos especiais será tomado como string!!!), acentos, espaços, etc... Se você quiser escrever uma frase na tela, por exemplo, não pode deixá-la solta pelo script. Esta frase deve ser uma string, ou o script dará erro.
     
    Exemplo:
    print('Apóstrofos') print("Aspas") print([[Colchete-Colchete]]) print([==[Colchete-Igual-Igual-Colchete]==]) OBS: 1 << Isto é um number.
    "1" << Isto é uma string.
     
    Booleanos  
    Os booleanos podem assumir apenas dois valores: true e false.
    true: Valor verdadeiro.
    false: Valor falso.
     
    OBS: Os booleanos podem ser complicados de entender no começo, mas com o tempo você acostuma. Não se preocupe com eles agora...
     
    Exemplo:
      print(true) print(false) print(nil)  
     
    Functions  
    Exatamente o que o nome diz: é o que estamos vendo agora. Functions são nada mais nada menos do que funções.
     
     
    Exemplo:
      print(function() end) OBS: Não se preocupe com isso ainda!
     
    Tables ou Arrays  
    São tabelas, ou seja, armazenam mais do que um valor dentro de uma "caixa". Tabelas podem armazenar outras tabelas e todos os valores dentro de uma tabela possuem um identificador, chamado "index" (índice).
     
    Tabelas começam com o símbolo { (Chave) e terminam com o símbolo } (Chave).
     
    Exemplo:
    print({})  
    Userdata  
    Lua é uma linguagem de programação criada para dar extensão à linguagem de programação C e C++. Userdatas são ponteiros que indicam valores em C ou C++. Não se preocupe com eles.
     
     
    Nil  
    Nil simboliza um valor nulo. Não deixa de ser um valor, mas é um valor sem conteúdo.
     
    Exemplo:
    print(nil)  
    As funções retornam!
     
    Toda função retorna um ou mais valores, nem que sejam valores nulos (nil), portanto você pode usar uma função dentro do print para escrever os valores que a função retornar! Vamos usar como exemplo a função type(valor), que vai nos retornar uma string com o tipo do valor.
      Exemplo: print(type(1))  
     
    O exemplo acima vai escrever em sua tela a frase: "Number", pois 1 é um number!
     
     
    Exercícios:
    Usando a função print para escrever na tela e type para pegar o tipo de algum valor, obtenha as seguintes frases na tela:
     
     
    Resposta:
     
     
     
     
    Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
     
     
     
     
     
     
    Aula 4 - Operadores e Bibliotecas >>
  10. Obrigado
    MaXwEllDeN recebeu reputação de DATA Vinny em Aulas de Scripting Lua   
    Salve rapasiada.
     
    Revivendo aqui pra avisar que corrigi is links das aulas que quebraram quando fizeram atualização do forum.
     
    Não consegui encontrar no fórum a aula 4, de alguma forma ela se perdeu.
     
    Abraços
  11. Gostei
    MaXwEllDeN recebeu reputação de Naze em Aulas de Scripting Lua   
    Salve rapasiada.
     
    Revivendo aqui pra avisar que corrigi is links das aulas que quebraram quando fizeram atualização do forum.
     
    Não consegui encontrar no fórum a aula 4, de alguma forma ela se perdeu.
     
    Abraços
  12. Obrigado
    MaXwEllDeN recebeu reputação de elielder em Aulas de Scripting Lua   
    Salve rapasiada.
     
    Revivendo aqui pra avisar que corrigi is links das aulas que quebraram quando fizeram atualização do forum.
     
    Não consegui encontrar no fórum a aula 4, de alguma forma ela se perdeu.
     
    Abraços
  13. Obrigado
    MaXwEllDeN recebeu reputação de Cat em Aulas de Scripting Lua   
    Salve rapasiada.
     
    Revivendo aqui pra avisar que corrigi is links das aulas que quebraram quando fizeram atualização do forum.
     
    Não consegui encontrar no fórum a aula 4, de alguma forma ela se perdeu.
     
    Abraços
  14. Gostei
    MaXwEllDeN recebeu reputação de Ghaz em Private Shop   
    Autor: MaXwEllDeN (Maxwell Denisson) Versão testada: TFS 0.3.6, 8.54

    #Introdução

    Oi galera :B, Olha, hoje vou postar um sistema que acho que vai agradar a muitas pessoas, só estou postando ele porque alguém a quem eu vendí passou pra alguém que liberou ele em um fórum aí, já que já liberaram não vejo motivos pra não postá-lo aqui

    #Demonstração
    Private Shop System V.2


    #Instalação

    O Sistema "se instala sozinho", só é fazer o download e jogar na pasta do servidor.

    Galera, faz MUITO, MUITO tempo mesmo que eu fiz esse sistema, então ele deve ter um bocado de gambiarras e essas coisas do tipo . Espero que seja útil a alguém.
  15. Gostei
    MaXwEllDeN recebeu reputação de DATA Vinny em [Aula 1] Introdução   
    Introdução
    Aula 1
    O que é scripting?
    Do modo mais simples possível: scripting é o ato de programar. O nome scripting vem do nome "script".
    O que é um script?
    De um modo geral, um script é um bloco de código escrito em uma linguagem de programação interpretada, ou seja, ele precisa que alguma coisa leia ele e possa "traduzir" seu conteúdo. Lembre-se de que "script" não é um termo específico de Open Tibia Servers.
    O que é uma linguagem de programação interpretada?
    Os brasileiros falam português, ingleses falam inglês e chineses falam mandarim, e com isso o mundo é composto por várias línguas.
    No mundo da programação não é diferente. Existem várias línguas que podem ser usadas, cada uma com uma característica e modo de escrever diferente (Assim como o português é diferente do inglês).
    Entre estas linguagens, existem 2 tipos: as linguagens interpretadas e as linguagens compiladas (Não-interpretadas). Podemos fazer uma comparação tosca com a vida real: o português seria uma linguagem interpretada (Nosso cérebro precisa "traduzir" a mensagem), e os desenhos seriam a língua compilada (Nosso cérebro reconhece automaticamente a "mensagem" do desenho).
    As linguagens compiladas são aquelas que não precisam ser lidas por nenhum programa, pois "conversam" diretamente com o computador, enquando a linguagem interpretada não consegue se comunicar com o computador, então a linguagem compilada recebe a mensagem do codigo interpretado e traduz numa linguagem que o computador entenda, dai a linguagem interpretada pode conversar com o computador (Desde que alguém traduza suas mensagens).
    Voltando para a parte de Open Tibia Servers, a linguagem compilada é a linguagem usada no seu servidor: o .exe no Windows, por exemplo, e a linguagem interpretada são os scripts .lua. O seu servidor compilado vai ler os scripts .lua e traduzir o conteúdo deles para que o computador possa executar o que o script manda.
    Se os scripts são escritos em linguagens interpretadas, qual é a linguagem dos script usados nos Open Tibia Servers?
    Os Open Tibia Servers usam uma linguagem de programação (Interpretada) chamada Lua, que foi feita aqui no Brasil mesmo.
    Características da linguagem de programação Lua:
    Linguagem de Programação Interpretada Linguagem de Programação Imperativa ou Programação Procedural Linguagem de Scripts ou Linguagem de Extensão Pequena, Fácil, Leve e Eficiente " Lua foi criada por um time de desenvolvedores do Tecgraf da PUC-Rio, a princípio, para ser usada em um projeto da Petrobras. Devido à sua eficiência, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da programação, como no desenvolvimento de jogos (a LucasArts, por exemplo, usou a linguagem no jogo Escape from Monkey Island), controle de robôs, processamento de texto, etc. Também é freqüentemente usada como uma linguagem de propósito geral. "
    Wikipédia - Lua (Linguagem de Programação)
    O que eu preciso para aprender Lua e começar a produzir meus scripts?
    Paciência (Embora seja de fácil aprendizado, você vai levar algum tempo para aprender a linguagem)
      Humildade (Nunca se sinta o melhor, nem ridicularize aqueles que tiverem um conhecimento menor que o seu)
      Vontade (Não adianta fazer as coisas sem o menor interesse, você não chegará a lugar nenhum sem vontade)
      Criatividade (O principal para produzir um script é ter a idéia do que você vai fazer)
      Conhecer a Lógica da Programação (Não se preocupe, eu vou ensinar a Lógica da Programação nas próximas aulas.)
      Interpretador Lua (Para testar seus scripts, claro. Você pode usar o seu OTServer para testar, e ainda usar um interpretador Lua para testar seus scripts simples fora do OTServer)
      Editor Lua (Não é realmente necessário, uma vez que você pode usar um editor de textos qualquer, como o bloco de notas, mas ter um Editor Lua vai ajudar muito, e alguns até vêm com um Interpretador Lua junto!)
      Pagar uma taxa de R$ 700,00, afinal, não estou escrevendo estas aulas de graça! (OK, não precisa pagar nada, mas no mínimo poste seus scripts aqui e ajude a seção a crescer ) Onde posso encontrar um Interpretador e/ou Editor Lua?
    Como interpretador (No caso de produzir scripts para Open Tibia Servers) você deve usar um servidor próprio, pessoal somente para testar os scripts que você fez, e pode usar também um Interpretador Lua geral, para testar seus scripts fora dos OTServers.
    Como Editor Lua você pode usar qualquer editor de textos, mas eu recomendo usar um editor que seja próprio para a linguagem Lua. Existem dois editores que já vem com um Interpretador Lua "embutido". São eles: OTScript Live! [Download] e SciTE (Scintilla) [Download].
    Exercício-Tarefa:
    Pesquise mais na internet sobre a linguagem Lua, Scripts, etc...
    Somente dúvidas serão aceitas aqui! Comentários que não forem dúvidas serão apagados e os autores serão reportados!
    Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
    Aula 2 - Lógica da programação >> Script Live By colex.rar
  16. Curtir
    MaXwEllDeN recebeu reputação de Rogex Joyz em [Ajuda] - Item que muda o outfit mas as cores nao vem junto.   
    local look = 128 -- Coloque o ID do outfit function onEquip(cid, item) local aux = getCreatureOutfit(cid) aux.lookType = look doSetCreatureOutfit(cid, aux, -1) return true end function onDeEquip(cid, item) doRemoveCondition(cid, CONDITION_OUTFIT) return true end
  17. Curtir
    MaXwEllDeN recebeu reputação de XRay em COMO ADICIONAR NPC QUE MUDA DE COR?   
    Olá!
     
    Poderia descrever melhor como funcionaria isso? 
     
    Seria como se as cores de outfit do NPC mudassem em determinados horários do dia? Em que instante essas cores devem mudar?
  18. Gostei
    MaXwEllDeN recebeu reputação de robson pablo dos san em Criando Funções   
    O return é literalmente RETORNAR. Vamos ver uma função simples:


    function mostrar_oi() print("oi") end Essa função não retorna nada, ela simplesmente faz imprimir na tela "oi". Agora vamos pensar no seguinte caso: Eu quero uma função que me dê o valor da soma de dois números, como ficaria? function somar(numero1, numero2) return numero1 + numero2 end Bem, essa função vai somar os dois parâmetros(numero1, numero2) e retorná-los, mas você pensa: Como assim retorná-los? Seguinte: local ummaisdois = somar(1, 2) print(ummaisdois)

    O que aconteceria nesse caso aí seria: A função somar, iria somar o número 1 com o número 2, e guardaria o valor na variável ummaisdois.

    Sobre return true e false:
    Olha, o return vai retornar um valor como mostrado anteriormente. Então se eu colocar return true ele vai retornar verdadeiro, e se eu colocar return false ele vai retornar falso. O return true nas funções "callback" do Open Tibia, como na function onSay(cid, words, param) serve "para indicar se ocorreu tudo bem na execução da função". Se eu coloco um return true em uma function onSay, quando o personagem falar as palavras configuradas no talkaction.xml, o servidor vai executar o script, mas não vai fazer o player "falar". Quando você coloca um return false ele executa o script, só que o player "fala" as words que estavam no talkaction.xml.
  19. Gostei
    MaXwEllDeN recebeu reputação de Toca do Aranha em [Resolvido] ITEM QUE DA STORAGE AO CLICAR   
    Não precisa disso tudo não cara.
     

    function onUse(cid, item)    if getPlayerStorageValue(cid, 11139) < 1 then       setPlayerStorageValue(cid, 11139, 1)       doRemoveItem(item.uid, 1)    end    return true end  

    <action itemid="11138" event = "script" value = "ItemStorage.lua" />
  20. Gostei
    MaXwEllDeN recebeu reputação de C H R O N I C L E em [Aula 1] Introdução   
    Introdução
    Aula 1
    O que é scripting?
    Do modo mais simples possível: scripting é o ato de programar. O nome scripting vem do nome "script".
    O que é um script?
    De um modo geral, um script é um bloco de código escrito em uma linguagem de programação interpretada, ou seja, ele precisa que alguma coisa leia ele e possa "traduzir" seu conteúdo. Lembre-se de que "script" não é um termo específico de Open Tibia Servers.
    O que é uma linguagem de programação interpretada?
    Os brasileiros falam português, ingleses falam inglês e chineses falam mandarim, e com isso o mundo é composto por várias línguas.
    No mundo da programação não é diferente. Existem várias línguas que podem ser usadas, cada uma com uma característica e modo de escrever diferente (Assim como o português é diferente do inglês).
    Entre estas linguagens, existem 2 tipos: as linguagens interpretadas e as linguagens compiladas (Não-interpretadas). Podemos fazer uma comparação tosca com a vida real: o português seria uma linguagem interpretada (Nosso cérebro precisa "traduzir" a mensagem), e os desenhos seriam a língua compilada (Nosso cérebro reconhece automaticamente a "mensagem" do desenho).
    As linguagens compiladas são aquelas que não precisam ser lidas por nenhum programa, pois "conversam" diretamente com o computador, enquando a linguagem interpretada não consegue se comunicar com o computador, então a linguagem compilada recebe a mensagem do codigo interpretado e traduz numa linguagem que o computador entenda, dai a linguagem interpretada pode conversar com o computador (Desde que alguém traduza suas mensagens).
    Voltando para a parte de Open Tibia Servers, a linguagem compilada é a linguagem usada no seu servidor: o .exe no Windows, por exemplo, e a linguagem interpretada são os scripts .lua. O seu servidor compilado vai ler os scripts .lua e traduzir o conteúdo deles para que o computador possa executar o que o script manda.
    Se os scripts são escritos em linguagens interpretadas, qual é a linguagem dos script usados nos Open Tibia Servers?
    Os Open Tibia Servers usam uma linguagem de programação (Interpretada) chamada Lua, que foi feita aqui no Brasil mesmo.
    Características da linguagem de programação Lua:
    Linguagem de Programação Interpretada Linguagem de Programação Imperativa ou Programação Procedural Linguagem de Scripts ou Linguagem de Extensão Pequena, Fácil, Leve e Eficiente " Lua foi criada por um time de desenvolvedores do Tecgraf da PUC-Rio, a princípio, para ser usada em um projeto da Petrobras. Devido à sua eficiência, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da programação, como no desenvolvimento de jogos (a LucasArts, por exemplo, usou a linguagem no jogo Escape from Monkey Island), controle de robôs, processamento de texto, etc. Também é freqüentemente usada como uma linguagem de propósito geral. "
    Wikipédia - Lua (Linguagem de Programação)
    O que eu preciso para aprender Lua e começar a produzir meus scripts?
    Paciência (Embora seja de fácil aprendizado, você vai levar algum tempo para aprender a linguagem)
      Humildade (Nunca se sinta o melhor, nem ridicularize aqueles que tiverem um conhecimento menor que o seu)
      Vontade (Não adianta fazer as coisas sem o menor interesse, você não chegará a lugar nenhum sem vontade)
      Criatividade (O principal para produzir um script é ter a idéia do que você vai fazer)
      Conhecer a Lógica da Programação (Não se preocupe, eu vou ensinar a Lógica da Programação nas próximas aulas.)
      Interpretador Lua (Para testar seus scripts, claro. Você pode usar o seu OTServer para testar, e ainda usar um interpretador Lua para testar seus scripts simples fora do OTServer)
      Editor Lua (Não é realmente necessário, uma vez que você pode usar um editor de textos qualquer, como o bloco de notas, mas ter um Editor Lua vai ajudar muito, e alguns até vêm com um Interpretador Lua junto!)
      Pagar uma taxa de R$ 700,00, afinal, não estou escrevendo estas aulas de graça! (OK, não precisa pagar nada, mas no mínimo poste seus scripts aqui e ajude a seção a crescer ) Onde posso encontrar um Interpretador e/ou Editor Lua?
    Como interpretador (No caso de produzir scripts para Open Tibia Servers) você deve usar um servidor próprio, pessoal somente para testar os scripts que você fez, e pode usar também um Interpretador Lua geral, para testar seus scripts fora dos OTServers.
    Como Editor Lua você pode usar qualquer editor de textos, mas eu recomendo usar um editor que seja próprio para a linguagem Lua. Existem dois editores que já vem com um Interpretador Lua "embutido". São eles: OTScript Live! [Download] e SciTE (Scintilla) [Download].
    Exercício-Tarefa:
    Pesquise mais na internet sobre a linguagem Lua, Scripts, etc...
    Somente dúvidas serão aceitas aqui! Comentários que não forem dúvidas serão apagados e os autores serão reportados!
    Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
    Aula 2 - Lógica da programação >> Script Live By colex.rar
  21. Gostei
    MaXwEllDeN recebeu reputação de abmauromacedo em [Aula 8] while & repeat   
    << Aula 7 - Estruturas de Controle
    Essa aula foi escrita por um urso gordo Mock, todos os créditos pertencem à ele.
    While & repeat
    Aula 8
    Primeiramente desculpe a demora por essa aula, ficou meio aquela de; ah faz você, não faz você, anem faz você; Mais em fim estamos de volta com uma coisa indispensável em scripting que são os loops. Antes de tudo devo avisa que loops são perigosos, você pode travar seu servidor inteiro usando errado um loop.
    Os loops são usados para inicialmente quando temos varias funções juntas iguais, por exemplo, fazendo um jogador falar oi 10 vezes. Sem os loops você faria assim:
      doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) Com loops você resume isso a 4 linhas, e ainda pode fazer milhares de coisas com eles!
     
    While
    Sintaxe:
    Traduzindo:
    Então repare, enquanto algo for verdadeiro fazer... Ele vai executar o que estiver dentro do loop infinitas vezes até que o ((sentença)) seja falso ou você mande ele parar.
    Veja um exemplo:
      while getPlayerLevel(cid) < 10 do --- Enquanto o level for menor que 10 doPlayerAddExp(cid,1000) adcionar 1k de exp por vez end Viram? enquanto o nível for menor que 10 ele vai adicionar 1k de exp. Ele ira verificar, se for false (maior que 10) ele pula tudo e vai para o que estiver depois do end, se for true (for menor que 10) ele ira adicionar 1k de exp e depois ira verificar de novo, ele vai executar até que seja 10. Nessa hora que se tem que tomar cuidado, é na verificação. Se você colocar algo como: while 1 < 2 do, ele vai executar eternamente, até que vc encerre o programa forçadamente (ctrl-alt-del) ou reinicie o pc, ou então feche o programa no X
     
    Veja mais alguns exemplos:
      pos = {x=100,y=100,z=100,stackpos=0} local stack = 0 while stack < 255 do pos.stackpos = stack local item = getThingFromPos(pos) if item.itemid ~= 0 and isCreature(item.uid) == false then doRemoveItem(item.uid,item.type) end stack = stack+1 end Nesse exemplo declaramos uma pos e um numero, no loop verifica se o numero é menor que 255, se for a stackpos vai ser igual ao numero e depois ira verificar o que tem no mapa naquela posição, se tiver um item e nao for um player ou monster ele ira remover o item e no final adcionar +1 numero a nossa variavel stack, Nisso repare, ele ira executar 255 veze e ira deletar todos os items daquela posição imagina vc escrevendo isso 255 vezes sem o loop .
     
    Repeat
    Ao contrario do while ele é tudo ao contrario, a verificação é no fim e ele só repete se for false (contrario de while que é se for true)
    Sintaxe:
    Tradução:
    Bem nao seria até seria até que nao, pois se você usar: until true ele vai parar, e se usar: until false ele vai continuar. è ao contrario especificando mais. Diferente do while, o repeat ele executa primeiro o bloco para depois verificar, a verificação é no final. Tambem perigoso pois se usado incorretamente vc vai travar seu server tambem. Mais nao ligue pra isso todos que começam a mexer com loops sempre travam seus servidores no começo é normal.
    Veja o repeat em uso:
      local n = 0 repeat n = n+1 print('ola pessoas este é o loop numero:'..n) until n == 10 Ele ira executar 10 vezes, ele ira parar quando n for 10. Agora veja o exemplo de limpar o char adaptado para o repeat e veja a diferença (repare nos sinais de > e< )
      pos = {x=100,y=100,z=100,stackpos=0} local stack = 0 repeat pos.stackpos = stack local item = getThingFromPos(pos) if item.itemid ~= 0 and isCreature(item.uid) == false then doRemoveItem(item.uid,item.type) end stack = stack+1 until stack > 255 Viram? Ao invez da verificação ser no começo do loop ela é feita no final, entao ao final do lopp antes da verificação eu adciono +1 no valor da variavel stack, e ele so ira parar o loop assim que stack for maior que 255 (ou seja 256), entao assim que o script dentro do loop temrinar com o valor 256 ele ira parar o loop e prosseguir com o resto do script. break Antes de terminarmos irei falar rapidamente sobre o break. Ele é usado APENAS em loops e serve para "quebrar" o loop, acontece quando vc quer parar o loop sem a verificação, ou parar antes de algo.
     
    Veja:
      local parar = 0 while os.date('%S') == '45' do print('Verificando se agora são 45 segundos') if parar > 25 then break end print('Nem é agora são:'..os.date('%S')..' segundos') parar = para+1 end print('oi') Nesse caso criei um script para ver se agora são X horas X minutos e 45 segundos (não importa quantas horas e minutos só os segundos), e se depois de 25 verificações não for 45 segundos ele ira usar o break. Quando usado ele ira finalizar o loop e irar continuar a executar o script depois do loop, no caso o print('oi') ai e o resto do script (caso exista) Nesse caso criei um script para ver se agora são X horas X minutos e 45 segundos (não importa quantas horas e minutos só os segundos), e se depois de 25 verificações não for 45 segundos ele ira usar o break. Quando usado ele ira finalizar o loop e irar continuar a executar o script depois do loop, no caso o print('oi') ai e o resto do script (caso exista)
     
     
    Exercícios Faça seguinte:
     
    Crie um loop que execute enquanto o player estiver online, e enquanto ele estiver online colocar para kickar ele. Use o repeat para criar um script que solte 25 magic effects diferentes. Use qualquer loop para criar um script que mova um player por 5 sqms em direções aleatórios (o script deve parar com o break!) DESAFIO Crie um script que gere um loop infinito que só pare depois de 10 segundos de execução.
     
    Essa aula foi escrita por um urso gordo Mock, todos os créditos pertencem à ele.
    Aula 9 - Tabelas >> Respostas:
     
  22. Gostei
    MaXwEllDeN recebeu reputação de abmauromacedo em [Aula 6] Escopo   
    << Aula 5 - Variáveis e Comentários
    Escopo
    Aula 6
    Vimos na aula anterior sobre variáveis, e vimos também, bem superficialmente, como declarar variáveis como locais.
    Você pode se perguntar: "Qual a utilidade de uma variável local?", "O que ela tem de diferente de uma variável global?" ou "Se elas são tão importantes, por que quase ninguém usa?".
    Vamos por passos. Imagine a seguinte situação: "Você tem uma variável chamada var, e ela vale 1, mas em certo ponto do script você quer que ela receba o valor 2, execute alguma coisa (Como um print) e, depois que executar, ela retorne ao valor anterior (1).". Um dos modos de fazer isto é usando uma outra variável temporária para armazenar o valor antigo, ficando assim:
      var = 1 temp_var = var var = 2 print(var) var = temp_var temp_var = nil print(var) Veja que o código possui 7 linhas para fazer algo tão simples, por isso usar a variável temporária foi uma idéia de girico chamada carinhosamente de Gambiarra. Vamos fazer a mesma coisa que antes, mas agora do modo "correto":
      var = 1 do local var = 2 print(var) end print(var) Observe que agora, mesmo tendo ficado com quase o mesmo número de linhas, está mais "charmoso". Vamos agora entender o do e o end. O do é uma estrutura de controle (Abre/Fecha um Escopo) que abre um novo escopo. O end é uma estrutura de controle (Abre/Fecha um Escopo) que fecha o escopo mais alto. Você não deve ter entendido. Imagine que os escopos são como uma pirâmide, que começa inicialmente no andar 0 (Estes números são "imaginários", somente para facilitar o entendimento). As estruturas de controle tem o poder de construir ou destruir um degrau desta pirâmide, no caso o do constrói um andar e o end destrói o andar mais alto da pirâmide. Vamos tentar entender:
      -- Estamos no andar 0. do -- Construímos um andar. Agora estamos no andar 1. end -- Destruímos o andar 1 e voltamos para o 0. -- Estamos no andar 0. Importante: Você deve terminar no andar que começou, ou seja, no andar 0. Vamos ver o mesmo código um pouco maior:
      -- Estamos no andar 0. do -- Construímos um andar. Agora estamos no andar 1. do -- Construímos mais um andar. Agora estamos no andar 2. do -- Construímos mais um andar. Agora estamos no andar 3. end -- Destruímos o andar 3 e voltamos para o 2. end -- Destruímos o andar 2 e voltamos para o 1. end -- Destruímos o andar 1 e voltamos para o 0. -- Estamos no andar 0. A definição ideal para escopo (Em Lua) seria: Até onde as variáveis locais são alcançáveis. Isso porque se você estiver no andar 1 e tiver declarado uma variável no andar 2, quando o andar 2 tiver sido destuido pelo end, a variável será apagada e você não poderá mais chamá-la no andar 1, embora você possa chamar variáveis do andar 1 se estiver no andar 2. Se esta variável existir no andar 1 e no 2, vai sempre pegar a que estiver mais perto (No caso, a do andar 2). Se existir uma local alcançável e uma global, sempre pegará a local ao invés da global. A global só será pega se não houver nenhuma local alcançável. Você pode declarar uma variável local em um andar e modificar seu valor em outro escopo. Esta é uma tática muito útil:
      var = 1 do local var do var = 2 end do print(var) end end print(var) Preste bastante atenção quanto à isto:
      var = 1 do do local var = 2 end do print(var) end end Se você está pensando que o valor escrito será 2, está muito enganado. A variável local "var" do primeiro andar 2 será apagada assim que o end destruir o andar, então o valor escrito será 1. Essa "pegadinha" pode frustrar vocês, então prestem atenção. Vale lembrar que, como as funções são armazenadas em variáveis, elas também podem ser locais:
      teste = function() end -- Variável Global function teste() end -- Variável Global local teste = function() end -- Variável Local local function teste() end -- Variável Local OBS: Toda Estrutura de Controle deve terminar com o end. São estruturas de controle:
    do function while repeat if OBS: O repeat é um caso especial e não usa end para finalizar o escopo. Ele usa o until. Veremos as 4 últimas em aulas futuras. Exercício Descubra o que acontece em cada um dos casos e por quê:
      var = 1 local var = 2 print(var)   var = 1 do local var = 2 end print(var)   var = 1 local var do var = 2 end print(var)   var = 1 local var = 2 do print(var) end   var = 1 do local var = 2 do var = 3 end print(var) end Aula escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
    Aula 7 - Estruturas de Controle >>
  23. Obrigado
    MaXwEllDeN recebeu reputação de abmauromacedo em [Aula 3] Primeiros Passos   
    << Aula 2 - Lógica da programação
     
     
     
     
    Primeiros Passos
     
     
     
     
    Aula 3
     
     
     
    Relembrando o que eu disse na primeira aula, você precisará de um interpretador Lua e é muito recomendado que possua também um bom editor com suporte à sintaxe Lua, então nosso primeiro passo será obter o editor e o interpretador.
     
    As aulas serão voltadas ao scripting para Open Tibia Servers, então nada melhor do que um bom OTServer para testar seus scripts, mas ficar testando os scripts em um OTServer pode ser uma tarefa cansativa e demorada, então vamos usar também scripts fora de OTServers para praticar. Para isso, você pode fazer o download de qualquer um dos seguintes programas:
     
     
    Editores + Interpretadores:
    SciTE Scintilla [Avançado] OTScript Live! [Recomendado]  
    Editores:
     
    Notepad++  
    Interpretadores:
     
    Lua [Oficial]  
    Depois que você tiver seu editor e interpretador Lua (Recomendo o OTScript Live!), instale ele. No caso do OTScript Live!, depois de descompactar, vá em "Help", no menu, e clique em "Register To Lua". Abrirá uma caixa confirmando a alteração, basta apertar "OK" e todos os seus scripts irão abrir com o OTScript Live!.
     
    Testando seus scripts!
    No caso do SciTE, para testar o seu script você deve primeiro salvá-lo com a extensão Lua (*.lua). No caso do SciTE e do OTScript Live! você pode testar seu script apenas apertando F5, sendo que no OTScript Live! não é necessário salvar o script antes de testar.
     
    Após pressionar F5, o SciTE irá abrir uma área de textos abaixo da área de edição com as informações do teste, e o OTScript Live! vai abrir uma janela.
     
    Para testar se o seu SciTE ou OTScript Live! está funcionando, use o seguinte script:
     
     
      print("Hello world!") Nas informações mostradas pelo interpretador deve estar escrito "Hello world!". Se aparecer, parabéns, você testou o seu primeiro script Lua...  (ou não )
     
     
    O que o script fez? o0
     
    Uma das coisas mais importantes nos scripts são as funções. Uma função é "um bloco de código previamente pronto", uma subrotina, que quando chamada executa esse bloco. Imagine as funções como um atalho para executar alguma coisa. Pode ser usada, por exemplo, para encurtar scripts que tenham alguma parte do codigo que se repita muitas vezes. Criando uma função você pode usar esse código que se repete muitas vezes somente uma vez (Dentro da função), então em vez de usar esse bloco várias vezes, você só precisaria chamar a função várias vezes.
     
    Você pode criar suas próprias funções, mas isso veremos mais para frente. Tudo o que importa agora é aprender a chamar funções.
     
      O "Nome da Função", na verdade, é o nome da variável em que está armazenada a função, mas não se preocupem com isto ainda... O "Nome da Função" é o nome que você deve chamar para que a função ocorra, pois há vária funções (Obviamente), então você deve especificar qual função quer chamar. É a mesma coisa do que ter 3 pessoas. Quando quiser chamar uma das pessoas, deve dizer o nome dela.   Os argumentos são as "Respostas" para as "Perguntas" da função chamada. A maioria das funções faz "perguntas". No caso da função "print", ela nos "perguntou" o que queriamos escrever na tela, e "respondemos": "Hello world!".   É importante lembrar que cada pergunta deve ser respondida adequadamente, por exemplo, se alguém te pergunta: "Que horas são?" você não pode responder: "Sim.". A mesma coisa acontece com as funções, você deve responder exatamente o que ela está perguntando. Outra observação importante é que você deve responder as perguntas da função na ordem em que foram perguntadas. Se a pergunta nº 1 for "Que horas são?" e a nº 2 for "Quer um biscoito?", você deve responder respectivamente que horas são e se você quer um biscoito.     OBS: Algumas funções fazem "perguntas" opcionais, ou seja, você pode ou não responder. Se você não "responder", a própria função atribuirá um valor padrão para a resposta.   Os parâmetros são simplesmente o conjunto de todos os argumentos.   OBS: Todos os argumentos (Respostas) do parâmetro devem estar entre parênteses e ser separados por vírgulas!     Tipos de valores!   Bem, como eu disse, cada resposta deve seguir o tipo da pergunta, então vou citar aqui os tipos destes valores.   OBS: Existe uma função para descobrir o tipo de cada valor! Esta função é a função type(valor)...       Numbers   Como o nome diz, numbers são números, não há muito o que falar sobre eles...   Exemplo: print(1) print(2) print(3) OBS: A função print aceita todos os tipos como resposta.
     
    Strings  
    As strings devem iniciar com um símbolo especial e deve terminar com o mesmo caractere que foi usado para iniciar a string. Esses símbolos são:
     
    Apóstrofo: Começa com ' e termina com '.
    Aspas: Começa com " e termina com ".
    Colchete-Colchete: Começa com [[ e termina com ]].
    Colchete-Igual-Igual-Colchete: Começa com [==[ e termina com ]==].
     
    As strings são conjuntos de caracteres, como letras, números (Não são numbers, pois se houver um número entre os símbolos especiais será tomado como string!!!), acentos, espaços, etc... Se você quiser escrever uma frase na tela, por exemplo, não pode deixá-la solta pelo script. Esta frase deve ser uma string, ou o script dará erro.
     
    Exemplo:
    print('Apóstrofos') print("Aspas") print([[Colchete-Colchete]]) print([==[Colchete-Igual-Igual-Colchete]==]) OBS: 1 << Isto é um number.
    "1" << Isto é uma string.
     
    Booleanos  
    Os booleanos podem assumir apenas dois valores: true e false.
    true: Valor verdadeiro.
    false: Valor falso.
     
    OBS: Os booleanos podem ser complicados de entender no começo, mas com o tempo você acostuma. Não se preocupe com eles agora...
     
    Exemplo:
      print(true) print(false) print(nil)  
     
    Functions  
    Exatamente o que o nome diz: é o que estamos vendo agora. Functions são nada mais nada menos do que funções.
     
     
    Exemplo:
      print(function() end) OBS: Não se preocupe com isso ainda!
     
    Tables ou Arrays  
    São tabelas, ou seja, armazenam mais do que um valor dentro de uma "caixa". Tabelas podem armazenar outras tabelas e todos os valores dentro de uma tabela possuem um identificador, chamado "index" (índice).
     
    Tabelas começam com o símbolo { (Chave) e terminam com o símbolo } (Chave).
     
    Exemplo:
    print({})  
    Userdata  
    Lua é uma linguagem de programação criada para dar extensão à linguagem de programação C e C++. Userdatas são ponteiros que indicam valores em C ou C++. Não se preocupe com eles.
     
     
    Nil  
    Nil simboliza um valor nulo. Não deixa de ser um valor, mas é um valor sem conteúdo.
     
    Exemplo:
    print(nil)  
    As funções retornam!
     
    Toda função retorna um ou mais valores, nem que sejam valores nulos (nil), portanto você pode usar uma função dentro do print para escrever os valores que a função retornar! Vamos usar como exemplo a função type(valor), que vai nos retornar uma string com o tipo do valor.
      Exemplo: print(type(1))  
     
    O exemplo acima vai escrever em sua tela a frase: "Number", pois 1 é um number!
     
     
    Exercícios:
    Usando a função print para escrever na tela e type para pegar o tipo de algum valor, obtenha as seguintes frases na tela:
     
     
    Resposta:
     
     
     
     
    Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
     
     
     
     
     
     
    Aula 4 - Operadores e Bibliotecas >>
  24. Obrigado
    MaXwEllDeN recebeu reputação de abmauromacedo em [Aula 2] Lógica da Programaçao   
    << Aula 1 - Introdução
     
     
     
     
    Lógica da Programação
    Aula 2
     
     
     
     
    O que é a Lógica da Programação?
    Bem, tudo o que é escrito em alguma linguagem de programação deve seguir uma lógica para poder funcionar. Vamos pegar um exemplo simples e curto: Um script de SD. (Sudden Death Rune)
     
    Quando o script de SD for chamado (Alguém usou a SD), ela segue passos básicos, que é basicamente a execução dela. Primeiro o script vai verificar se quem usou a SD possui nível, magic level, etc... suficiente para poder usar a SD. Se não possuir opa! Ela vai enviar uma mensagem de erro ao jogador, um efeito de fumaça e vai encerrar a execução. Caso contrário: se for um jogador com todos os requerimentos básicos para usar uma SD, então o script vai verificar se o alvo é um Player ou Monstro. Se não for vai enviar uma mensagem de erro, efeito, e vai parar de executar. Se for um monstro ou player, então o script fará um efeito da SD atingindo o alvo, toda aquela piromancia louca, e então vai tirar o devido dano do jogador.
     
    Um pouco cansativo de ler tudo isso, mas observe o exemplo abaixo:
     
     
      Quando uma SD for usada, então faça: Verifique se o jogador que usou a SD possui nível igual ou maior que 45, e se possui nível mágico maior ou igual a 15. Se possuir, faça: Se o alvo da SD for um Monstro ou Jogador, então faça: Calcule o dano que causará ao alvo. Remova uma carga da SD. Execute o efeito de SD. Calcule o dano que causará ao alvo e execute-o no alvo, tirando a vida dele ou mana, no caso de o alvo estiver usando o Magic Shield (Utamo Vita). Mas se o alvo da SD não for um Monstro ou Jogador, então faça: Envie uma mensagem de erro ao jogador. Envie um efeito de fumaça na posição do jogador. Aqui termina a verificação se o alvo da SD é um Monstro ou Jogador, ou nenhum dos dois. Mas se o jogador não possuir estes requerimentos, então faça: Envie uma mensagem de erro ao jogador. Envie um efeito de fumaça na posição do jogador. Aqui termina a verificação se o jogador possui ou não os requerimentos. Aqui termina a execução da SD. Agora, depois deste algoritmo, talvez tenha ficado mais claro como os programas de computador funcionam. Tudo não passa de um processo lógico, onde a linguagem de programação só serve como uma "máscara" para que o programador escreva o código seguindo esta lógica, por isso é ultra importante saber a lógica da programação antes de começar a programar. O que é um Algoritmo? O "código" que eu escrevi acima (Dentro da caixa de texto) representando o uso da SD foi um algoritmo. Os algoritmos são formas de representar a lógica seguida pelo programa. São passos que o programa segue para atingir determinado objetivo ou em outras palavras, completar uma tarefa (No caso da SD, matar ou não o alvo, ou enviar uma mensagem de erro). Um exemplo de algoritmo são as operações matemáticas, como somar, dividir, multiplicar, subtrair... Quando você soma 2 mais 2, você está executando um algoritmo para ele atingir o objetivo (O resultado!!), que é 4. Um programa ou script é basicamente a escrita dos algoritmos em uma linguagem de programação que é executada pelo computador de forma lógica.
     
    Esta aula foi curta pois eu prefiro lhes ensinar as estruturas lógicas conforme ensino as mesmas em Lua, assim trabalhando a lógica e Lua ao mesmo tempo. Primeiro ensino como funciona a estrutura na Lógica e depois ensino como aplicar em Lua.
     
    Exercícios-Tarefa:
     
    1. Monte o algoritmo de um script de "Shovel (Pá)".
    2. Monte o algoritmo de um script de "Pedra que troca sexo".
    3. Monte o algoritmo de "Ir ao cinema".
    4. Monte o algoritmo de "Fazer bolo".
     
     
     
    Respostas: Só abra depois de ter tentado resolver os exercícios!
     
    Exercício 1:
     
     
     
    Exercício 2:
     
     
    Exercício 3:
     
     
    Exercício 4:
     
     
     
    OBS: Nota-se que já fiquei cansado nas respostas do exercício 3 e 4... 
     
    Aqui só serão aceitas dúvidas ou reporte de erros. Qualquer coisa que não se encaixe nesta descrição será apagado sem aviso.
     
    Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
     
     
    Aula 3 - Primeiros Passos >>
  25. Obrigado
    MaXwEllDeN recebeu reputação de LeoTK em Patterns   
    Pattern
     
    Pattern ("Padrão" em pt-br) é uma poderosa funcionalidade para manipulação de strings (caso você não saiba o que é uma "string", busque saber antes de continuar, recomendo
    também ter um certo domínio sobre a biblioteca string), e usada para buscar um padrão de texto pré-definido.
     
    Porque aprender ?

    Possui recursos indispensáveis quando se precisa trabalhar com strings, alta aplicabilidade em scripts direcionados a otserv (talkactions), não que se vá usar isso a todo o momento, mas é altamente recomendado que se saiba trabalhar com patterns, é extremamente útil as vezes.
     
    Funções

    Algumas funções da biblioteca padrão string que aceitam pattern em seus parâmetros:
    string.find(string, pattern) – Procura a primeira instância da pattern na string
    string.gfind(string, pattern) – Quando for chamada repetidamente, retorna cada instância da pattern na string
    string.gsub(string, pattern, replace) – Retorna uma string em que todas as instâncias da pattern foram substituidas por replace
    string.match(string, pattern, init) – Retorna uma lista de ocorrências da pattern na string, começando em init (1 significa o primeiro caractere da string, 2 o segundo, assim por diante)
     
    Conjuntos

    Quando se constrói uma pattern, se utiliza alguns caracteres, cada um representando um conjunto diferente:
     (onde "x" não é um caractere mágico ^$()%.[]*+-?) → Representa o caractere "x" mesmo;
    . → Representa todos os caracteres;
    %a → Representa todas as letras;
    %c → Representa todos os caracteres de controle;
    %d → Representa todos os dígitos;
    %l → Representa todas as letras minusculas;
    %p → Representa todos os caracteres de pontuação;
    %s → Representa todos os caracteres de espaço;
    %u → Representa todas as letras maiúsculas;
    %w → Representa todos os caracteres alfanuméricos;
    %x → Representa todos os dígitos hexadecimais;
    %z → Representa o caractere com a representação do 0 (zero). Ao usar zeros na pattern ela não irá funciona, use esta nesse caso;
    Ao usar letra maiúscula, isso faz representar o contrário (Exemplo: %A → Representa tudo que não for letras; %D → Representa tudo que não for um digito; assim por diante...).
    Como dito anteriormente, para se criar uma pattern é necessário utilizar esses conjuntos, uma pattern é feita de uma sequência desses conjuntos. Se você quisesse criar uma pattern para encontrar uma certa string em um texto, por exemplo, para encontrar os números da string "23otserv", você teria que usar esta pattern "%d%dotserv", assim você estaria definindo que quer os numeros que estão ao lado da palavra ‘otserv’.
    Mas e se tivesse que encontrar um numero com 10 "casas" ? Por isso existe os modificadores, para evitar essa repetição desnecessária.
     
    Modificadores

    Servem principalmente para poupar serviço e são quatro, entenda 'x' como sendo algum conjunto (%a, %c, %d, ...):
    x* → Retorna 0 ou mais repetições do conjunto x. Sempre retornará a maior cadeia possível encontrada;
    x+ → Retorna 1 ou mais repetições do conjunto x. Sempre retornará a maior cadeia possível encontrada;
    x- → Retorna 0 ou mais repetições do conjunto x. Sempre retornará a menor cadeia possível encontrada;
    x? → Retorna 0 ou 1 ocorrência de x;
     
     
    Elementos especiais

    Existe também quatro elementos especiais:
    %n → Sendo n um numero entre 1 e 9, busca a enésima captura (apenas vi sendo usada na função string.gsub);
    %bxy → Procura uma string que inicia com x e termina com y;
    ^ → Quando está no começo da pattern, força a pattern a ser encontrada no começo da string;
    $ → Quando está no final da pattern, força a pattern a ser encontrada no fim da string;
    Nota: Se ^ ou $ estiverem em outros lugares da pattern, não fazem nada, apenas representam eles mesmos.
     
     
     
    Construindo uma pattern

    Vamos construir algumas patterns com os elementos citados acima.
    Primeiro alguns exemplos e depois uma explicação mais detalhada de cada elemento da pattern:
    String para as patterns: "Exemplo lua de pattern lua feito em lua"
    exemplos toscos, a gente se vê por aqui
    Pattern:
    (%a+) lua
    Capturaria:
     
    Exemplo lua de pattern lua feito em lua
    Ele só retornará o primeiro caso que corresponder com a pattern.
    Agora, ao invés de usar o "%a" fosse usado o "." (que captura tudo), aconteceria isso:

    Pattern:
    (.+) lua

    Capturaria:
    Exemplo lua de pattern lua feito em lua

    Como "%a" captura apenas letras e não o "espaço", foi por isso que no primeiro exemplo só capturou a palavra "Exemplo" e no segundo exemplo, como foi usado o "." que captura tudo, capturou uma parte maior (ai que vêm a parte do modificador) por causa do modificador "+" que sempre vai buscar a maior cadeia possivel, agora veja um exemplo usando o "-":

    Pattern:
    (.-) lua

    Capturaria:
    Exemplo lua de pattern lua feito em lua

    O modificador "-", como dito anteriormente, captura a menor cadeia e por isso capturaria apenas o "Exemplo".
    Todos os modificadores são importantes.

    Um exemplo maior:
    Pattern:
    (%a+) lua (.-) lua (.+)
     
    Capturaria:
    Exemplo lua de pattern lua feito em lua
    Para quem não entendeu

    Explicação passo a passo:
     
    (%d+)
    Captura → O parenteses define que você quer que retorne essa captura.
    Conjunto → No caso é o de digitos.
    Modificador → No caso mostra que é para obter a maior cadeia possivel com 1 ou mais repetições do conjunto.
     
     
    Um exemplo mais avançado

    Agora usando de exemplo a pattern da função string.trim, que remove os espaços em branco do lado esquerdo e direito da string.
    function string.trim(str)    -- Function by Colandus    return (string.gsub(str, "^%s*(.-)%s*$", "%1")) end    
     
     
    string.gsub(str, "^%s*(.-)%s*$", "%1")
    str → Uma string qualquer;
    ^ → Força o começo da pattern ser encontrada no começo de str;
    %s* → Conjunto de espaços, podendo ter 0 ou mais repetições;
    (.-) → A captura principal, a que vai ser retornada, podendo ser digitos, letras, espaço, etc;
    $ → Força o final da pattern ser encontrada no fim de str;
    %1 → Retorna a 1ª captura da pattern e usa como parametro da função (Esse é um dos elementos especiais, %n);
    Dessa forma será removido os espaços apenas no começo e no fim da string !
     
    Complemento

    Depois de dominar e entender como funciona as patterns, vamos aplica-las em funções, vou mostrar um exemplo de cada função (as que foram citadas no começo).


    string.find:
     
    init, end, case1, case2 = string.find("minha string123", "(%a+) (.+)")  
    init → Onde inicia a captura encontrada (nesse caso, init = 1);
    end → Onde termina a captura encontrada (end = 15);
    case1 → Primeira captura que equivale a pattern (%a+) (case1 = minha);
    case2 → Segunda captura que equivale a pattern (.+) (case2 = string123);
        string.gfind: for occ in string.gfind("a1a2a3a4a5", "(%a%d)") do    print(occ) end   occ → Terá um valor para cada instância da pattern (%a%d) encontrada, então irá printar a1, a2, a3, a4 e a5.   string.match: case1, case2 = string.match("Eu tenho 50 reais", "(%d+) (%a+)")  
    case1 → Primeira captura que equivale a pattern (%d+) (case1 = 50);
    case2 → Segunda captura que equivale a pattern (%a+) (case2 = reais);
       
    Referência

    http://www.lua.org/manual/5.1/pt/manual.html#5.4.1
    http://lua-users.org/wiki/PatternsTutorial



    Então é isso, espero ter sido o mais claro possivel,
    Qualquer dúvida, erro ou sugestão, poste !    
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo