Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 06/13/10 em todas áreas
-
Creditos: Vodkart Kydrai fala galerinha resolvi posta alguns script que acontece quando o player mata algum monstro ... o primeiro é o script que acontece quando voce mata um Monstro abre o teleport. o segundo é matar o monstro e sumir a parede por algum tempo. Obs: o Nome do monstro deve ser colocado com Letra Maiuscula. [ Matar monstro e abrir Teleport ] creaturescript\script [ Matar Monstro e parede sumir por determinado tempo ] creaturescript\script [ Matar Monstro e ser teleportado ] [ Matar Monstro e Ganhar Storage ]2 pontos
-
Mega Lista De Servidores 8.50~8.57 Yurots Nome: Styller Yurots 0.7.2 (8.54~8.57) Tópico: Clique Aqui Autor: LeozeraRox Download: Clique Aqui Scan: Clique Aqui Nome: Stranger Yurots 0.1 Tópico: Clique aqui Autor: BlinkRox Download: Clique aqui Scan: Clique aqui Nome: Sartori Server 1.0 Tópico: Clique aqui Autor: FezZinN (Felipe Sartori) Download: Clique aqui Scan: Clique aqui Nome: Slayer Yurots 8.54~8.57 Tópico:Clique aqui Autor:Zerosky Download:Clique aqui Scan:Clique aqui Nome: Mix Yurots 0.0.2 Tópico: Clique Aqui Autor: RenanSdc e Bondx Download: Clique Aqui Scan: Clique Aqui Nome: New Baiak Yurots Tópico: Clique Aqui Autor: Baiak Download: Clique Aqui Scan: Não Tem Mapas Próprios ! Nome: Alissow Ots 4.0 Tópico: Clique Aqui Autor: Alissow Download: Clique Aqui Scan: Clique Aqui Nome: Sleeper Map 0.4 Tópico: Clique aqui Autor: TheSleeper Download: Parte 1 • Parte 2 Scan: Clique aqui Nome: Kreuus Otserv V 0.10 Tópico:Clique aqui Autor:AdminKreuus Download:Clique aqui Scan:Clique aqui Nome: Vancini OT Tópico:Clique aqui Autor:Vancini Download:Clique aqui Scan:Clique aqui Nome: Demonic Ots 0.1.0 Tópico:Clique aqui Autor:Carnavotu Download:Clique aqui Scan:Clique aqui Nome: The Forgotten Server Tópico: Clique Aqui Autor: Alissow ( Criador Do Topico ) Download:Clique Aqui Scan: Não tem Nome: Naxedot 7.5 Tópico: Clique Aqui Autor: Terad (Criador do Topico, Não sei se e o Autor do Otserver) Download:Clique Aqui Scan: Clique Aqui Nome: Rookgaardserver V0.1.2 Tópico: Clique Aqui Autor: Adriano2512 Download:Clique Aqui Scan: Clique Aqui Nome: Snowz Thyrania V1.1 Tópico: Clique Aqui Autor: Luisfe23 Download:Clique Aqui Scan:Clique Aqui Mapa Global Nome: Real Server 2.2 Tópico: Clique Aqui Autor: DoidinMapper Download:Clique Aqui Scan:Não Tem Nome: Projeto Mind Global V 0.9 Tópico: Clique Aqui Autor: Siemamalina Download:Clique Aqui Scan:Clique Aqui Nome: Servfull 3.5 Topico: Clique Aqui Autor: Helinholima Download:Clique Aqui Scan:Clique Aqui OBS: Pesso a Todos que se encontrar algum link errado, falar nos comentários para eu arrumar.2 pontos
-
Programação.lua ( Super Teórico, Muita Leitura )
PostadorHunter e um outro reagiu a XJhoow por um tópico no fórum
Olá XTibianos. Eu lí boa parte desse conteúdo, é realmente, muito bom, cansativo.. mas você pode salvar no favorito e ler um tópico por dia.. assim melhora.. Terá DOUBLE, TRIPLE.. POST, por que é muito grande, caso esteja a infringir as regras, me avisem! Fonte: Site lua O que é Lua? Lua é uma linguagem de programação poderosa, rápida e leve, projetada para estender aplicações. Lua combina sintaxe simples para programação procedural com poderosas construções para descrição de dados baseadas em tabelas associativas e semântica extensível. Lua é tipada dinamicamente, é interpretada a partir de bytecodes para uma máquina virtual baseada em registradores, e tem gerenciamento automático de memória com coleta de lixo incremental. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida. Por que escolher Lua? Lua é uma linguagem estabelecida e robusta Lua é usada em muitas aplicações industriais (e.g., Adobe's Photoshop Lightroom), com ênfase em sistemas embutidos (e.g., o middleware Ginga para TV digital) e jogos (e.g., World of Warcraft). Lua é atualmente a linguagem de script mais usada em jogos. Lua tem um sólido manual de referência e existem vários livros sobre a linguagem. Várias versões de Lua foram lançadas e usadas em aplicações reais desde a sua criação em 1993. Lua é rápida Lua tem uma merecida reputação de ótimo desempenho. Outras linguagens de script aspiram ser "tão rápidas quanto Lua". Vários benchmarks mostram Lua como a linguagem mais rápida dentre as linguagens de script interpretadas. Lua é rápida não só em programas específicos para benchmarks, mas no dia-a-dia também. Porções substanciais de aplicações grandes são escritas em Lua. Lua é portátil Lua é distribuída via um pequeno pacote e compila sem modificações em todas as plataformas que têm um compilador ANSI/ISO C. Lua roda em todos os tipos de Unix e Windows, e também em dispositivos móveis (como computadores de mão e celulares que usam BREW, Symbian, Pocket PC, etc.) e em microprocessadores embutidos (como ARM e Rabbit) para aplicações como Lego MindStorms. Lua é embutível Lua é uma engine rápida e pequena que você pode facilmente embutir na sua aplicação. Lua tem uma API simples e bem documentada que permite uma integração forte com código escrito em outras linguagens. É simples estender Lua com bibliotecas escritas em outras linguagens. Também é simples estender programas escritos em outras linguagens com Lua. Lua é usada para estender programas escritos não só em C e C++, mas também em Java, C#, Smalltalk, Fortran, Ada, Erlang, e mesmo outras linguagens de script, como Perl and Ruby. Lua é poderosa (e simples) Um conceito fundamental no projeto de Lua é fornecer meta-mecanismos para a implementação de construções, em vez de fornecer uma multidão de construções diretamente na linguagem. Por exemplo, embora Lua não seja uma linguagem puramente orientada a objetos, ela fornece meta-mecanismos para a implementação de classes e herança. Os meta-mecanismos de Lua trazem uma economia de conceitos e mantêm a linguagem pequena, ao mesmo tempo que permitem que a semântica seja estendida de maneiras não convencionais. Lua é pequena Incluir Lua numa aplicação não aumenta quase nada o seu tamanho. O pacote de Lua 5.1.4, contendo o código fonte, documentação e exemplos, ocupa 212K comprimido e 860K descompactado. O fonte contém cerca de 17000 linhas de C. No Linux, o interpretador Lua contendo todas as bibliotecas padrões de Lua ocupa 153K e a biblioteca Lua ocupa 203K. Lua é livre Lua é software livre de código aberto, distribuída sob uma licença muito liberal (a conhecida licença MIT). Lua pode ser usada para quaisquer propósitos, incluindo propósitos comerciais, sem qualquer custo ou burocracia. Basta fazer um download e usá-la. Lua tem importância global O projeto e a evolução de Lua foram apresentados em junho de 2007 na HOPL III, a 3a Conferência da ACM sobre a História das Linguagens de Programação. Essa conferência ocorre a cada 15 anos (a primeira foi em 1978 e a segunda em 1993) e somente poucas linguagens são apresentadas a cada vez. A escolha de Lua para a HOPL III é um importante reconhecimento do seu impacto mundial. Lua é a única linguagem de programação de impacto desenvolvida fora do primeiro mundo, estando atualmente entre as 20 linguagens mais populares na Internet (segundo o índice TIOBE). Quais as origens de Lua? Lua é inteiramente projetada, implementada e desenvolvida no Brasil, por uma equipe na PUC-Rio (Pontifícia Universidade Católica do Rio de Janeiro). Lua nasceu e cresceu no Tecgraf, o Grupo de Tecnologia em Computação Gráfica da PUC-Rio. Atualmente, Lua é desenvolvida no laboratório Lablua. Tanto o Tecgraf quanto Lablua são laboratórios do Departamento de Informática da PUC-Rio. Eu peço que não postem aqui, que aqui eu quero ir postando curiosidades, e coisas que acho sobre a programação lua. Acho legal, porque acho também que tem bastante gente que quer programar .lua não é mesmo? Criarei um post, em lugar possível, algum lugar do fórum e posteriormente, criarei meu próprio fórum para a discussão do mesmo. Introdução Lua é uma linguagem de programação de extensão projetada para dar suporte à programação procedimental em geral e que oferece facilidades para a descrição de dados. A linguagem também oferece um bom suporte para programação orientada a objetos, programação funcional e programação orientada a dados. Lua foi planejada para ser utilizada por qualquer aplicação que necessite de uma linguagem de script leve e poderosa. Lua é implementada como uma biblioteca, escrita em C limpo (isto é, no subconjunto comum de ANSI C e C++). Por ser uma linguagem de extensão, Lua não possui a noção de um programa principal: ela somente funciona embarcada em um programa cliente anfitrião, chamado de programa hospedeiro ou simplesmente de hospedeiro. Esse programa hospedeiro pode invocar funções para executar um pedaço de código Lua, pode escrever e ler variáveis Lua e pode registrar funções C para serem chamadas pelo código Lua. Através do uso de funções C, Lua pode ser estendida para lidar de maneira apropriada com uma ampla variedade de domínios, permitindo assim a criação de linguagems de programação personalizadas que compartilham um arcabouço sintático. A distribuição Lua inclui um exemplo de um programa hospedeiro chamado lua, o qual usa a biblioteca de Lua para oferecer um interpretador de linha de comando Lua completo. Lua é um software livre e, como de praxe, é fornecido sem garantias, conforme dito na sua licença. A implementação descrita neste manual está disponível no sítio web oficial de Lua, www.lua.org. Como qualquer outro manual de referência, este documento é árido em algumas partes. Para uma discussão das decisões por trás do projeto de Lua, veja os artigos técnicos disponíveis no sítio web oficial de Lua. Para uma introdução detalhada à programação em Lua, veja o livro de Roberto Ierusalimschy, Programming in Lua (Segunda Edição). A Linguagem Esta seção descreve os aspectos léxicos, sintáticos e semânticos de Lua. Em outras palavras, esta seção descreve quais itens léxicos são válidos, como eles são combinados, e qual o significado da sua combinação. As construções da linguagem serão explicadas usando a notação BNF estendida usual, na qual {a} significa 0 ou mais a's e [a] significa um a opcional. Não-terminais são mostrados como non-terminal, palavras-chave são mostradas como kword e outros símbolos terminais são mostrados como `=´. Convenções Léxicas Em Lua, Nomes (também chamados de identificadores) podem ser qualquer cadeia de letras, dígitos, e sublinhados que não começam com um dígito. Esta definição está de acordo com a definição de nomes na maioria das linguagens. (A definição de letras depende de qual é o idioma (locale): qualquer caractere considerado alfabético pelo idioma corrente pode ser usado como um identificador.) Identificadores são usados para nomear variáveis e campos de tabelas. As seguintes palavras-chave são reservadas e não podem ser utilizadas como nomes: and break do else elseif end false for function if in local nil not or repeat return then true until while Lua é uma linguagem que diferencia minúsculas de maiúsculas: and é uma palavra reservada, mas And e AND são dois nomes válidos diferentes. Como convenção, nomes que começam com um sublinhado seguido por letras maiúsculas (tais como _VERSION) são reservados para variáveis globais internas usadas por Lua. As seguintes cadeias denotam outros itens léxicos: + - * / % ^ # == ~= <= >= < > = ( ) { } [ ] ; : , . .. ... Cadeias de caracteres literais podem ser delimitadas através do uso de aspas simples ou aspas duplas, e podem conter as seguintes seqüências de escape no estilo de C: '\a' (campainha), '\b' (backspace), '\f' (alimentação de formulário), '\n' (quebra de linha), '\r' (retorno de carro), '\t' (tabulação horizontal), '\v' (tabulação vertical), '\\' (barra invertida), '\"' (citação [aspa dupla]) e '\'' (apóstrofo [aspa simples]). Além disso, uma barra invertida seguida por uma quebra de linha real resulta em uma quebra de linha na cadeia de caracteres. Um caractere em uma cadeia de caracteres também pode ser especificado pelo seu valor numérico usando a seqüência de escape \ddd, onde ddd é uma seqüência de até três dígitos decimais. (Note que se um caractere numérico representado como um seqüência de escape for seguido por um dígito, a seqüência de escape deve possuir exatamente três dígitos.) Cadeias de caracteres em Lua podem conter qualquer valor de 8 bits, incluindo zeros dentro delas, os quais podem ser especificados como '\0'. Cadeias literais longas também podem ser definidas usando um formato longo delimitado por colchetes longos. Definimos uma abertura de colchete longo de nível n como um abre colchete seguido por n sinais de igual seguido por outro abre colchete. Dessa forma, uma abertura de colchete longo de nível 0 é escrita como [[, uma abertura de colchete longo de nível 1 é escrita como [=[ e assim por diante. Um fechamento de colchete longo é definido de maneira similar; por exemplo, um fechamento de colchete longo de nível 4 é escrito como ]====]. Uma cadeia de caracteres longa começa com uma abertura de colchete longo de qualquer nível e termina no primeiro fechamento de colchete longo do mesmo nível. Literais expressos desta forma podem se estender por várias linhas, não interpretam nenhuma seqüência de escape e ignoram colchetes longos de qualquer outro nível. Estes literais podem conter qualquer coisa, exceto um fechamento de colchete longo de nível igual ao da abertura. Por conveniência, quando uma abertura de colchete longo é imediatamente seguida por uma quebra de linha, a quebra de linha não é incluída na cadeia de caracteres. Como exemplo, em um sistema usando ASCII (no qual 'a' é codificado como 97, quebra de linha é codificado como 10 e '1' é codificado como 49), as cinco cadeias literais abaixo denotam a mesma cadeia: a = 'alo\n123"' a = "alo\n123\"" a = '\97lo\10\04923"' a = [[alo 123"]] a = [==[ alo 123"]==] Uma constante numérica pode ser escrita com uma parte decimal opcional e com um expoente decimal opcional. Lua também aceita constantes hexadecimais inteiras, através do uso do prefixo 0x. Exemplos de constantes numéricas válidas são: 3 3.0 3.1416 314.16e-2 0.31416E1 0xff 0x56 Um comentário começa com um hífen duplo (--) em qualquer lugar, desde que fora de uma cadeia de caracteres. Se o texto imediatamente depois de -- não é uma abertura de colchete longo, o comentário é um comentário curto, o qual se estende até o fim da linha. Caso contrário, ele é um comentário longo, que se estende até o fechamento de colchete longo correspondente. Comentários longos são freqüentemente usados para desabilitar código temporariamente. Valores e Tipos Lua é uma linguagem dinamicamente tipada. Isto significa que variáveis não possuem tipos; somente valores possuem tipos. Não existe definição de tipos na linguagem. Todos os valores carregam o seu próprio tipo. Todos os valores em Lua são valores de primeira classe. Isto significa que todos os valores podem ser armazenados em variáveis, passados como argumentos para outras funções e retornados como resultados. Existem oito tipos básicos em Lua: nil, boolean, number, string, function, userdata, thread e table. Nil é o tipo do valor nil, cuja propriedade principal é ser diferente de qualquer outro valor; ele geralmente representa a ausência de um valor útil. Boolean é o tipo dos valores false e true. Tanto nil como false tornam uma condição falsa; qualquer outro valor torna a condição verdadeira. Number representa números reais (ponto flutuante de precisão dupla). (É fácil construir interpretadores Lua que usem outra representação interna para números, tais como precisão simples de ponto flutuante ou inteiros longos; veja o arquivo luaconf.h.) O tipo string representa cadeias de caracteres. Em Lua, cadeias de caracteres podem conter qualquer caractere de 8 bits, incluindo zeros ('\0') dentro dela. Lua pode chamar (e manipular) funções escritas em Lua e funções escritas em C (ver §2.5.8). O tipo userdata permite que dados C arbitrários possam ser armazenados em variáveis Lua. Este tipo corresponde a um bloco de memória e não tem operações pré-definidas em Lua, exceto atribuição e teste de identidade. Contudo, através do uso de metatables, o programador pode definir operações para valores userdata (ver §2.8). Valores userdata não podem ser criados ou modificados em Lua, somente através da API C. Isto garante a integridade dos dados que pertencem ao programa hospedeiro. O tipo thread representa fluxos de execução independentes e é usado para implementar co-rotinas (ver §2.11). Não confunda o tipo thread de Lua com processos leves do sistema operacional. Lua dá suporte a co-rotinas em todos os sistemas, até mesmo naqueles que não dão suporte a processos leves. O tipo table implementa arrays associativos, isto é, arrays que podem ser indexados não apenas por números, mas por qualquer valor (exceto nil). Tabelas podem ser heterogêneas; isto é, elas podem conter valores de todos os tipos (exceto nil). Tabelas são o único mecanismo de estruturação de dados em Lua; elas podem ser usadas para representar arrays comuns, tabelas de símbolos, conjuntos, registros, grafos, árvores, etc. Para representar registros, Lua usa o nome do campo como um índice. A linguagem dá suporte a esta representação oferecendo a.name como um açúcar sintático para a["name"]. Existem várias maneiras convenientes de se criar tabelas em Lua . Da mesma forma que os índices, o valor de um campo da tabela pode possuir qualquer tipo (exceto nil). Em particular, dado que funções são valores de primeira classe, campos de tabela podem conter funções. Portanto, tabelas podem também possuir metódos . Valores do tipo table, function, thread e userdata (completo) são objetos: variáveis não contêm realmente estes valores, somente referências para eles. Atribuição, passagem de parâmetro, e retorno de funções sempre lidam com referências para tais valores; estas operações não implicam em qualquer espécie de cópia. A função type retorna uma cadeia de caracteres descrevendo o tipo de um dado valor. Coerção Lua provê conversão automática entre valores do tipo string e do tipo number em tempo de execução. Qualquer operação aritmética aplicada a uma cadeia de caracteres tenta converter esta cadeia para um número, seguindo as regras de conversão usuais. De forma análoga, sempre que um número é usado onde uma cadeia de caracteres é esperada, o número é convertido para uma cadeia, em um formato razoável. Para um controle completo sobre como números são convertidos para cadeias, use a função format da biblioteca string. Variáveis Variáveis são lugares usados para armazenar valores. Existem três tipos de variáveis em Lua: variáveis globais, variáveis locais e campos de tabelas. Um nome simples pode denotar uma variável global ou uma variávei local (ou um parâmetro formal de uma função, que é um caso particular de variável local): var = Nome Assume-se que toda variável é uma variável global a menos que ela seja explicitamente declarada como uma variável local . Variáveis locais possuem escopo léxico: variáveis locais podem ser livremente acessadas por funções definidas dentro do seu escopo . Antes da variável receber a sua primeira atribuição, o seu valor é nil. Colchetes são usados para indexar uma tabela: var = expprefixo `[´ exp `]´ A semântica de acessos a variáveis globais e a campos de tabelas pode ser mudada através do uso de metatabelas. Um acesso a uma variável indexada t[i] é equivalente a uma chamada gettable_event(t,i). A sintaxe var.Nome é apenas um açúcar sintático para var["Nome"]: var = expprefixo `.´ Nome Todas as variáveis globais são mantidas como campos em tabelas Lua comuns, chamadas de tabelas de ambiente ou simplesmente de ambientes (ver §2.9). Cada função tem sua própria referência para um ambiente, de forma que todas as variáveis globais dentro de uma função irão se referir para esta tabela de ambiente. Quando uma função é criada, ela herda o ambiente da função que a criou. Para obter a tabela de ambiente de uma função Lua, você deve chamar getfenv. Para trocar a tabela de ambiente, você deve chamar setfenv. (A única maneira de tratar o ambiente de funções C é através da a biblioteca de depuração; Um acesso a uma variável global x é equivalente a _env.x , que por sua vez é equivalente a gettable_event(_env, "x") onde _env é o ambiente da função corrente. Comandos Lua oferece um conjunto quase convencional de comandos, similar ao conjunto de comandos disponíveis em Pascal ou C. Este conjunto inclui atribuições, estruturas de controle, chamadas de funções e declarações de variáveis. Trechos A unidade de execução de Lua é denominada de trecho. Um trecho é simplesmente uma seqüência de comandos, os quais são executados sequencialmente. Cada comando pode opcionalmente ser seguido por um ponto-e-vírgula: trecho = {comando [`;´]} Não existem comandos vazios e portanto a construção ';;' não é válida. Lua trata um trecho como o corpo de uma função anônima com um número variável de argumentos. Um trecho pode ser armazenado em um arquivo ou em uma cadeia de caracteres dentro do programa hospedeiro. Para executar um trecho, Lua primeiro pré-compila o trecho em instruções para uma máquina virtual e depois executa o código compilado com um interpretador para a máquina virtual. Trechos também podem ser pré-compilados em uma forma binária; veja o programa luac para mais detalhes. Programas na forma de código fonte e na forma de um arquivo fonte já compilado são intercambiáveis; Lua automaticamente determina qual é o tipo do arquivo e age em conformidade com ele. Blocos Um bloco é uma lista de comandos; sintaticamente, um bloco é a mesma coisa que um trecho: bloco = trecho Um bloco pode ser explicitamente delimitado para produzir um único comando: comando = do bloco end Blocos explícitos são úteis para controlar o escopo de declarações de variáveis. Blocos explícitos são também usados às vezes para adicionar um comando return ou break no meio de outro bloco . Atribuição Lua permite atribuições múltiplas. Em virtude disto, a sintaxe para atribuição define uma lista de variáveis no lado esquerdo e uma lista de expressões no lado direito. Os elementos em ambos os lados são separados por vírgulas: comando = listavar `=´ listaexp listavar = var {`,´ var} listaexp = exp {`,´ exp} Antes da atribuição ser realizada, a lista de valores é ajustada para o comprimento da lista de variáveis. Se há mais valores do que o necessário, os valores em excesso são descartados. Se há menos valores do que o necessário, a lista é estendida com tantos nil's quantos sejam necessários. Se a lista de expressões termina com uma chamada de função, então todos os valores retornados por esta chamada entram na lista de valores, antes do ajuste ser realizado. Um comando de atribuição primeiro avalia todas as suas expressões e somente depois é que a atribuição é realizada. Desta forma, o código i = 3 i, a[i] = i+1, 20 atribui 20 a a[3], sem afetar a[4] porque o i em a é avaliado (para 3) antes de receber o valor 4. De modo similar, a linha x, y = y, x troca os valores de x e y e x, y, z = y, z, x permuta de maneira cíclica os valores de x, y e z. A semântica de atribuições para variáveis globais e campos de tabelas pode ser mudada através do uso de metatabelas. Uma atribuição para uma variável indexada t[i] = val é equivalente a settable_event(t,i,val) . Uma atribuição a uma variável global x = val é equivalente à atribuição _env.x = val, que por sua vez é equivalente a settable_event(_env, "x", val) onde _env é o ambiente da função sendo executada. (A variável _env não é definida em Lua. Ela foi usada aqui somente para fins didáticos.) Estruturas de Controle As estruturas de controle if, while e repeat possuem o significado usual e a sintaxe familiar: comando = while exp do bloco end comando = repeat bloco until exp comando = if exp then bloco {elseif exp then bloco} [else bloco] end Lua também possui um comando for, o qual possui duas variações . A expressão da condição de uma estrutura de controle pode retornar qualquer valor. Tanto false como nil são considerados um valor falso. Todos os valores diferentes de nil e false são considerados como verdadeiros (em particular, o número 0 e a cadeia de caracteres vazia também são considerados valores verdadeiros). No laço repeat–until, o bloco mais interno não termina na palavra-chave until, mas somente depois da condição. Desta forma, a condição pode referenciar variáveis locais declaradas dentro do bloco do laço. O comando return é usado para retornar valores de uma função ou de um trecho (que nada mais é do que uma função). Funções e trechos podem retornar mais de um valor, de modo que a sintaxe para o comando return é comando = return [listaexp] O comando break é usado para terminar a execução de um laço while, repeat ou for, pulando para o próximo comando depois do laço: comando = break Um break termina a execução do laço mais interno. Os comandos return e break somente podem ser escritos como o último comando de um bloco. Se é realmente necessário ter um return ou break no meio de um bloco, então um bloco interno explícito pode ser usado, como nas expressões idiomáticas do return end e do break end, pois agora tanto o return como o break são os últimos comandos em seus respectivos blocos (internos). Comando for O comando for possui duas variações: uma numérica e outra genérica. O laço for numérico repete um bloco de código enquanto uma variável de controle varia de acordo com uma progressão aritmética. Ele possui a seguinte sintaxe: comando = for nome `=´ exp `,´ exp [`,´ exp] do bloco end O bloco é repetido para nome começando com o valor da primeira exp, até que ele passe o valor da segunda exp através de seguidos passos, sendo que a cada passo o valor da terceira exp é somado a nome. De forma mais precisa, um comando for como for v = e1, e2, e3 do bloco end é equivalente ao código: do local var, limite, passo = tonumber(e1), tonumber(e2), tonumber(e3) if not (var and limite and passo) then error() end while (passo > 0 and var <= limite) or (passo <= 0 and var >= limite) do local v = var bloco var = var + passo end end Note o seguinte: * Todas as três expressões de controle são avaliadas um única vez, antes do laço começar. Elas devem obrigatoriamente produzir números. * var, limite e passo são variáveis invisíveis. Os nomes foram utilizados aqui somente para fins didáticos. * Se a terceira expressão (o passo) está ausente, então um passo de tamanho 1 é usado. * É possível usar break para sair de um laço for. * A variável de laço v é local ao laço; não é possível usar o valor desta variável após o fim do for ou depois do for ter sido interrompido pelo uso de um break. Se você precisa do valor desta variável, atribua-o a outra variável antes de interromper ou sair do laço. O comando for genérico funciona utilizando funções, chamadas de iteradoras. A cada iteração, a função iteradora é chamada para produzir um novo valor, parando quando este novo valor é nil. O laço for genérico possui a seguinte sintaxe: comando = for listadenomes in listaexp do bloco end listadenomes = Nome {`,´ Nome} Um comando for como for var_1, ···, var_n in explist do block end é equivalente ao código: do local f, s, var = explist while true do local var_1, ···, var_n = f(s, var) var = var_1 if var == nil then break end block end end Note o seguinte: * explist é avaliada somente uma vez. Os seus resultados são uma função iteradora, um estado e um valor inicial para a primeira variável iteradora. * f, s e var são variáveis invisíveis. Os nomes foram utilizados aqui somente para fins didáticos. * É possível usar break para sair de um laço for. * As variáveis de laço var_i são locais ao laço; não é possível usar os valores delas após o término do for. Se você precisa destes valores, você deve atribuí-los a outras variáveis antes de interromper o laço ou sair do mesmo. Chamadas de Função como Comandos Para permitir possíveis efeitos colaterais, funções podem ser executadas como comandos: comando = chamadadefuncao Neste caso, todos os valores retornados pela função são descartados.. Declarações Locais Variáveis locais podem ser declaradas em qualquer lugar dentro de um bloco. A declaração pode incluir uma atribuição inicial: comando = local listadenomes [`=´ listaexp] Caso ocorra uma atribuição inicial, a sua semântica é a mesma de uma atribuição múltipla (ver §2.4.3). Caso contrário, todas as variáveis são inicializadas com nil. Um trecho também é um bloco e portanto variáveis locais podem ser declaradas em um trecho fora de qualquer bloco explícito. O escopo de uma variável declarada desta forma se estende até o fim do trecho. Expressões As expressões básicas em Lua são as seguintes: exp = expprefixo exp = nil | false | true exp = Numero exp = Cadeia exp = funcao exp = construtortabela exp = `...´ exp = exp opbin exp exp = opunaria exp expprefixo = var | chamadadefuncao | `(´ exp `)´ Operadores binários compreendem operadores aritméticos , operadores relacionais , operadores lógicos e o operador de concatenação . Operadores unários compreendem o menos unário , o not unário e o operador de comprimento unário . Tanto chamadas de funções como expressões vararg podem resultar em múltiplos valores. Se uma expressão é usada como um comando (o que somente é possível para chamadas de funções , então a sua lista de retorno é ajustada para zero elementos, descartando portanto todos os valores retornados. Se uma expressão é usada como o último (ou o único) elemento de uma lista de expressões, então nenhum ajuste é feito (a menos que a chamada seja delimitada por parênteses). Em todos os demais contextos, Lua ajusta a lista de resultados para um elemento, descartando todos os valores exceto o primeiro. Aqui estão alguns exemplos: f() -- ajusta para 0 resultados g(f(), x) -- f() é ajustado para 1 resultado g(x, f()) -- g recebe x mais todos os resultados de f() a,b,c = f(), x -- f() é ajustado para 1 resultado (c recebe nil) a,b = ... -- a recebe o primeiro parâmetro da lista vararg, -- b recebe o segundo (tanto a como b podem receber nil caso não -- exista um parâmetro correspondente na lista) a,b,c = x, f() -- f() é ajustado para 2 resultados a,b,c = f() -- f() é ajustado para 3 resultados return f() -- retorna todos os resultados de f() return ... -- retorna todos os resultados recebidos da lista vararg return x,y,f() -- retorna x, y e todos os resultados de f() {f()} -- cria uma lista com todos os resultados de f() {...} -- cria uma lista com todos os parâmetros da lista vararg {f(), nil} -- f() é ajustado para 1 resultado Qualquer expressão delimitada por parênteses sempre resulta em um único valor. Dessa forma, (f(x,y,z)) é sempre um único valor, mesmo que f retorne múltiplos valores. (O valor de (f(x,y,z)) é o primeiro valor retornado por f, ou nil se f não retorna nenhum valor.) Operadores Aritméticos Lua provê os operadores aritméticos usuais: os operadores binários + (adição), - (subtração), * (multiplicação), / (divisão), % (módulo) e ^ (exponenciação); e o operador unário - (negação). Se os operandos são números ou cadeias de caracteres que podem ser convertidas para números (ver §2.2.1), então todas as operações possuem o seu significado usual. A exponenciação funciona para qualquer expoente. Por exemplo, x^(-0.5) calcula o inverso da raiz quadrada de x. Módulo é definido como a % b == a - math.floor(a/b)*b Ou seja, é o resto de uma divisão arredondada em direção a menos infinito. Operadores Relacionais Os operadores relacionais em Lua são == ~= < > <= >= Estes operadores sempre possuem como resultado false ou true. A igualdade (==) primeiro compara o tipo de seus operandos. Se os tipos são diferentes, então o resultado é false. Caso contrário, os valores dos operandos são comparados. Números e cadeias de caracteres são comparados de maneira usual. Objetos (valores do tipo table, userdata, thread e function) são comparados por referência: dois objetos são considerados iguais somente se eles são o mesmo objeto. Toda vez que um novo objeto é criado (um valor com tipo table, userdata, thread ou function) este novo objeto é diferente de qualquer outro objeto que existia anteriormente. É possível mudar a maneira como Lua compara os tipos table e userdata através do uso do metamétodo "eq" . As regras de conversão não se aplicam a comparações de igualdade. Portanto, "0"==0 é avaliado como false e t[0] e t["0"] denotam posições diferentes em uma tabela. O operador ~= é exatamente a negação da igualdade (==). Os operadores de ordem trabalham da seguinte forma. Se ambos os argumentos são números, então eles são comparados como tais. Caso contrário, se ambos os argumentos são cadeias de caracteres, então seus valores são comparados de acordo com a escolha de idioma atual. Caso contrário, Lua tenta chamar o metamétodo "lt" ou o metamétodo "le" . Uma comparação a > b é traduzida para b < a, ao passo que a >= b é traduzida para b <= a. Operadores Lógicos Os operadores lógicos em Lua são and, or e not. Assim como as estruturas de controle, todos os operadores lógicos consideram false e nil como falso e qualquer coisa diferente como verdadeiro. O operador de negação not sempre retorna false ou true. O operador de conjunção and retorna seu primeiro argumento se este valor é false ou nil; caso contrário, and retorna seu segundo argumento. O operador de disjunção or retorna seu primeiro argumento se o valor deste é diferente de nil e de false; caso contrário, or retorna o seu segundo argumento. Tanto and como or usam avaliação de curto-circuito; isto é, o segundo operando é avaliado somente quando é necessário. Aqui estão alguns exemplos: 10 or 20 --> 10 10 or error() --> 10 nil or "a" --> "a" nil and 10 --> nil false and error() --> false false and nil --> false false or nil --> nil 10 and 20 --> 20 (Neste manual, --> indica o resultado da expressão precedente.) Concatenação O operador de concatenação de cadeias de caracteres em Lua é denotado por dois pontos ('..'). Se ambos os operandos são cadeias de caracteres ou números, então eles são convertidos para cadeias de caracteres de acordo com as regras. Caso contrário, o metamétodo "concat" é chamado. Construtores de Tabelas Construtores de tabelas são expressões que criam tabelas. Toda vez que um construtor é avaliado, uma nova tabela é criada. Um construtor pode ser usado para criar uma tabelas vazia ou para criar uma tabela e inicializar alguns dos seus campos. A sintaxe geral de construtores é construtortabela = `{´ [listadecampos] `}´ listadecampos = campo {separadordecampos campo} [separadordecampos] campo = `[´ exp `]´ `=´ exp | Nome `=´ exp | exp separadordecampos = `,´ | `;´ Cada campo da forma [exp1] = exp2 adiciona à nova tabela uma entrada cuja chave é exp1 e cujo valor é exp2. Um campo da forma Nome = exp é equivalente a ["Nome"] = exp. Finalmente, campos da forma exp são equivalentes a = exp, onde i representa números inteiros consecutivos, iniciando com 1. Campos nos outros formatos não afetam esta contagem. Por exemplo, a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 } é equivalente a do local t = {} t[f(1)] = g t[1] = "x" -- primeira exp t[2] = "y" -- segunda exp t.x = 1 -- t["x"] = 1 t[3] = f(x) -- terceira exp t[30] = 23 t[4] = 45 -- quarta exp a = t end Se o último campo na lista possui a forma exp e a expressão é uma chamada de função ou uma expressão com um número variável de argumentos, então todos os valores retornados pela expressão entram na lista consecutivamente. Para evitar isto, coloque parênteses ao redor da chamada de função ou da expressão com número variável de argumentos. A lista de campos pode ter um separador a mais no fim, como uma conveniência para código gerado automaticamente. Se gostarem eu continuo , relembrando, tudo tirado do lua.org! Só tive o empenho de formatar!2 pontos -
Creditos: Maestrial(60%),MatheusMkalo(20%) & Vodkart(20%) pelas correção de Bugs. Explicaçao: Quando o player pisa no tile do treiner é mandando uma mensagem dizendo que se ele nao se movimentar em alguns minutos ele será mandado para o templo e será kikado automaticamente. MoveEvent/Scripts autokick.lua events1,events2= {},{}local config = {tempo = 15,storage = 20000 }function onStepIn(cid, item, frompos, topos)if isPlayer(cid) and getPlayerStorageValue(cid, config.storage) <= 0 thendoPlayerSendTextMessage(cid, 22, "[Trainer]: Movimente-se a cada " .. config.tempo .. " minutos, caso contrário, seu char será levado ao templo.")setPlayerStorageValue(cid, config.storage, 1)events1[getPlayerGUID(cid)] = addEvent(setPlayerStorageValue, config.tempo*60*1000-1000, cid, config.storage, -1)events2[getPlayerGUID(cid)] = addEvent(doTeleportThing, config.tempo*60*1000-500, cid, getTownTemplePosition(getPlayerTown(cid)))endreturn trueendfunction onStepOut(cid, item, frompos, topos)if isPlayer(cid) and getPlayerStorageValue(cid, config.storage) >= 1 thensetPlayerStorageValue(cid, config.storage, -1)doPlayerSendTextMessage(cid, 23, "System kick off!")stopEvent(events1[getPlayerGUID(cid)])stopEvent(events2[getPlayerGUID(cid)])endreturn trueend movements.xml <movevent type="StepIn" actionid="25000" event="script" value="autokick.lua"/><movevent type="StepOut" actionid="25000" event="script" value="autokick.lua"/> Agora abra o MAP EDITOR e coloque no TILE dos trainers o action id 25000 Seu sistema anti Exit está pronto.[/i]1 ponto
-
Design Screencast
noobdoxtibia reagiu a moskitinho por um tópico no fórum
Olá pessoal, este tópico vai conter todos os Screencasts que eu gravar ao longo da nossa jornada pokemon de aprendizado. Então vamo separar por categorias para ficar mais facil. ♦ Notícias 1 • Mudança de Post ♦ Notícias 2 • Copa e Meios de Comunicação Novo!!!♦ Notícias 3 • Blogs e Histórias ♦ ADS Coments 1 • Enquete ♦ Indicações • 1 Novo!!! ♦ ML 1 • Decepções, Irmão e Futebol ♦ ♦ Recursos no Temporada de Caça Novo!!! ♦ VT 2 • Dicas de Iluminação Recursos no Temporada de Caça É isso galera eu espero que gostem do meu projeto, se tiverem sugestão de temas ou qualquer coisa deixem um comentário e não esqueça se você achou legal e quer me ajudar de REP+ ficarei grato e me motivarei a sempre estar correndo atras de coisas novas pra vocês! :smile_positivo:1 ponto -
Talkaction System !online Com Reset! Ola EksTibianos Esse Sabado Foi Muinto Ruin Para min Porque minha Vo Esta Muinto mal No Hospital quase Morrendo Tomara DEUS que nao ! Amo Ela! Bem Chega de Papo Furado Explicando Bem o Script! As 19:00 Eu e VodKart Estava no Msn Zoando com Emoticons Ate que eu Tive Essa Grande Ideia de Criar um !online Mostrando Player Name [level] , [reset] sim sim bom mesmo agente começou Fazer e Fazendo e Botamos ! e testamos e tudu! Vá em Pasta do Seu Ot> Data > Talkactions > Scripts > Online Abra ela e Exclui tudu dentro e coloque isso! Vermelho= Ali Voce Botara o Storage Value do Seu Reset a Maioria Pode Ser 1020 Voce pode Ver Abrindo o Script do Seu Reset e olhando a Storage Value dele Espero Que Gostem Do Script! Creditos: DevilMoon 10% Vodkart 10% NewFang 80%1 ponto
-
[Movements] Esqui Na Neve
chukyville reagiu a NatsuMcDonald por um tópico no fórum
Ola pessoal, estou trazendo um script de movements para ot 8.50. Obs: O Script não é meu, achei aqui no meu ot, mas lembro de ter visto ele na Otfans. Tipo de script: Movements Nivel de dificuldade: Facil Servidor Testado: TFS 0.3.4 [u][b]Retirado do Otfans[/b][/u] 1.0 - SCRIPT 1 - Crie um arquivo na pasta " data ~> movements ~> scripts ~> car.lua" 2 - Bote o seguinte script dentro dele: local CAR_ID = {7266, 7267, 7266, 7267} function onStepIn(cid, item, pos, frompos) if isPlayer(cid) == TRUE then local carpos = getThingPos(item.uid) addEvent(carMove, 200, {cid = cid, oldpos = carpos}) end end function carMove(param) local car = getThingfromPos(param.oldpos) local newpos = getPlayerLookPos(param.cid) if getDistanceBetween(getThingPos(param.cid), param.oldpos) == 0 then if isInArray(CAR_ID, car.itemid) == TRUE then local tmp = newpos tmp.stackpos = 253 if doTileQueryAdd(car.uid, newpos) == 1 and getTilePzInfo(newpos) == FALSE and isCreature(getThingFromPos(tmp).uid) == FALSE then local carid = CAR_ID[getPlayerLookDir(param.cid)+1] local newcar = doCreateItem(carid, 1, newpos) doSetItemActionId(newcar, car.actionid) doSetItemSpecialDescription(newcar, car.description) doRemoveItem(car.uid, 1) doTeleportThing(param.cid, newpos, FALSE) doSendMagicEffect(param.oldpos, CONST_ME_GROUNDSHAKER) end end end return TRUE end 3 - Salve o script e salve. 4 - Volte para a pasta anterior ( movements ), e no arquivo movements.xml , abra como Bloco de Notas e nele adicione a seguinte linha: <movevent type="StepIn" itemid="7266" event="script" value="car.lua"/> <movevent type="StepIn" itemid="7267" event="script" value="car.lua"/> 1.1 - TUTORIAL 1 - Cria no seu mapa, uma area de neve ( Não é obrigatorio ser de neve, mas para deixar mais real botei esse exemplo ) , onde NÃO sera PZ, pois o carro não pode entrar/andar em areas de Protection Zone. Os IDS do carro sao 7266 e 7267. 2 - Apois ter criado sua pista, salve o mapa e fexe, hora de testar. 3 - Para dirigir o carro é muito simples, basta subir em cima dele. \o/ 4 - Para virar, aperte Crtl + Setas de Direção para escolher o lado em qual quer virar. 5 - Caso voce bata o carro, e esta dificil de tira-lo, é simples, basta voce subir em cima dele, e RAPIDAMENTE apertar Crtl + Lado oposto da parede. Assim ele saira andando perfeitamente Então é isso, duvidas pode falar Obs²: Script Nao é meu! 1.2 - MODIFICANDO 1 - Assim como eu, voce pode modificar o item em que vai ser usado como carro, no meu caso, eu usei tempest shield, pois assim os players poderiam usar o carro como transporte particular. 2 - Para modificar, basta voce mudar a seguinte linha do car.lua car.lua ~> local CAR_ID = {7266, 7267, 7266, 7267} no caso os IDS 7266, sao o carro na direção norte e sul. ( Vermelho ) e os IDS 7267 sao os carros na direção leste / oeste. ( Azul ) para modifica-lo, apenas mude o ID do item para o que voce quer usar. 3 - A Proxima etapa, é modificar no movements.xml <movevent type="StepIn" itemid="7266" event="script" value="car.lua"/> <movevent type="StepIn" itemid="7267" event="script" value="car.lua"/> Nessa parte, voce modifica o "itemid="7266" e o 7267, para o item que voce quer. 4 - Para modificar a velocidade do carro, mude o valor de "carmove, 200" para outro valor. 1.3 - VIDEO Para ver o video de exemplo, aqui esta o link: Link 1.4 - MAPA Caso alguem tenha um mapa pronto, bonito, e queira posta-lo aqui para usar, manda o link por PM que eu vejo e posto aqui! Download1 ponto -
[Talkactions] Deathlist Funcionando! (Tfs 0.3.6+)
jamersonandres reagiu a Doidin por um tópico no fórum
Deathlist funcionando! [TFS 0.3.6+] Fala galera, muitos OTs estão com o comando Death List (!deathlist) bugado, então estava pesquisando algum script semelhante que não bugasse o servidor e achei! Vá até a pasta Talkactions abra o arquivo Talkactions.xml e adicione esta Tag: <talkaction words="!deathlist" event="script" value="deathlist.lua"/> Depois de ter adicionado e salvado, vá até a pasta Scripts dentro da pasta Takactions e abra ou faça um script deathlist.lua e adicione isto dentro: local config = { deathAssistCount = getConfigValue('deathAssistCount') + 1, maxDeathRecords = getConfigValue('maxDeathRecords'), limit = "" } if(config.deathAssistCount > 0) then config.limit = " LIMIT 0, " .. config.deathAssistCount end function onSay(cid, words, param, channel) local target = db.getResult("SELECT `name`, `id` FROM `players` WHERE `name` = " .. db.escapeString(param) .. ";") if(target:getID() == -1) then doPlayerSendCancel(cid, "A player with that name does not exist.") return true end local targetName, targetId = target:getDataString("name"), target:getDataInt("id") target:free() local str, deaths = "", db.getResult("SELECT `id`, `date`, `level` FROM `player_deaths` WHERE `player_id` = " .. targetId .." ORDER BY `date` DESC LIMIT 0, " .. config.maxDeathRecords) if(deaths:getID() ~= -1) then repeat local killers = db.getResult("SELECT environment_killers.name AS monster_name, players.name AS player_name FROM killers LEFT JOIN environment_killers ON killers.id = environment_killers.kill_id LEFT JOIN player_killers ON killers.id = player_killers.kill_id LEFT JOIN players ON players.id = player_killers.player_id WHERE killers.death_id = " .. deaths:getDataInt("id") .. " ORDER BY killers.final_hit DESC, killers.id ASC" .. config.limit) if(killers:getID() ~= -1) then if(str ~= "") then str = str .. "\n" .. os.date("%d %B %Y %X ", deaths:getDataLong("date")) else str = os.date("%d %B %Y %X ", deaths:getDataLong("date")) end local count, i = killers:getRows(false), 0 repeat local monster = killers:getDataString("monster_name") if(i == 0 or i == (count - 1)) then monster = string.gsub(monster:gsub("an ", ""), "a ", "") end if(killers:getDataString("player_name") ~= "") then if(i == 0) then str = str .. "Killed at level " .. deaths:getDataInt("level") .. " by:\n " elseif(i == count) then str = str .. " and by " elseif(i % 4 == 0) then str = str .. ",\n " else str = str .. ", " end if(monster ~= "") then str = str .. monster .. " summoned by " end str = str .. killers:getDataString("player_name") else if(i == 0) then str = str .. "Died at level " .. deaths:getDataInt("level") .. " by:\n " elseif(i == count) then str = str .. " and by " elseif(i % 4 == 0) then str = str .. ",\n " else str = str .. ", " end str = str .. monster end i = i + 1 if(i == count) then str = str .. "." end until not(killers:next()) killers:free() end until not(deaths:next()) deaths:free() else str = "No deaths recorded." end doPlayerPopupFYI(cid, "Deathlist for player: " .. targetName .. ".\n\n" .. str) return true end Pronto, seu deathlist agora está funcionando normalmente! Créditos: Desconhecido.~1 ponto -
Tabelas
eduardo190696 reagiu a joaohd por um tópico no fórum
Olha eu de novo por aqui. Dessa vez, o tutorial é sobre tabelas. Muitas pessoas, por não conhecerem o poder das tabelas, acabam criando scripts enormes e de difícil configuração. Após a leitura deste tutorial, você estará apto a criar scripts com tabelas simples ou intermediárias, possibilitando o encurtamento de scripts e até mesmo uma melhor compreensão de scripts feitos com o uso das mesmas. Para ter uma noção da imensidade e importância das tabelas em LUA, este é o único modo de armazenamento de dados, sejam eles numéricos ou textos (strings). Observe como a tabela é representada em LUA: Quando verificar a existência das chaves “{}” em um script, estamos tratando de uma tabela. Vamos criar agora uma tabelinha simples, somente para explicação: Como pode ver, criei uma tabela de conteúdo misto, contendo strings e números. Cada valor separado por vírgulas pode ser chamado de célula, contendo um endereço único que veremos mais à frente. Caso eu queira o valor da primeira célula, devo conhecer seu endereço, que nada mais é que o nome da tabela seguido de seu índice: Os índices existem mesmo que ocultos. Sempre que você cria uma tabela e não os especifica, subentende-se que cada célula receberá um índice de numero crescente partindo do 1. Caso sejam especificados, estes podem ser escritos assim (existe outra maneira, mais avançada): Logo, para acessarmos qualquer valor da tabela, digitamos o endereço da célula, sendo que agora, o endereço é composto pelo nome da tabela, precedido de um ponto (.) e o índice. Logo, Após entender o básico, podemos passar para as tabelas múltiplas, que apesar de parecerem difíceis, seguem a mesma base das simples. Exemplo de tabela múltipla: Não, não desista ao se deparar com tabelas assim. A interpretação pode ser feita por meio de um organograma: Já a parte dos índices são iguais. Por exemplo, quero pegar o valor 1 dos assuntos do xtibia: Fácil, não? Agora, iremos aprender a obter o “tamanho” de uma tabela. Podemos fazê-lo de duas formas. Criarei uma tabela simples para a explicação: Maneira 1: Usamos a função table.getn(tabela) ou a função table.maxn(tabela). O uso é da seguinte maneira: Maneira 2 (fácil) : Inserimos o caracter “#” seguido do nome da tabela. Assim: Informações adicionais: ► O nome de uma tabela deve ser escrito sem espaços. ► O nome de uma tabela não deve conter caracteres coringas (!@%¨*) ► Tabelas não interpretam um valor vazio (nil) Creio que seja isto por hoje. Vou deixar alguns exercícios simples, para fixação: 1)Crie uma tabela simples com 6 valores, onde cada valor é uma string com o nome de um usuário do xtibia. 2)Crie uma tabela múltipla com 3 valores principais, cada um com o nome de uma área do xtibia, e dentro das áreas, o nome de 2 frequentadores da área correspondente. Respostas (tentem fazer primeiro, postando seus resultados): Materiais de apoio: Funções LUA Introdução à programação LUA + estruturas Começando a "scriptear" Tutorial sugerido por Vodkart. Você também pode pedir o seu aqui flw1 ponto -
Introdução À Programação Lua
MichelHelmer reagiu a joaohd por um tópico no fórum
Introdução à programação LUA e lógica de programação Assim como todas as linguagens de programação, LUA tem suas particularidades e sua estrutura lógica própria, a qual envolve suas funções, operadores e engines. Para começarmos a programação em LUA, devemos conhecer sua lógica, para que possamos aplicá-la em nossos códigos. Abaixo, você encontra os operadores da linguagem e sua explicação: • “Local” = É usado para a definição de variáveis. Pode ser encontrado também destacando uma função. Neste último caso, seu uso pode ser dispensado quando a função não se encontra embutida na função principal. Exemplo de uso: ► local a = 1 ► function onUse(cid, item, fromPosition, itemEx, toPosition) local function helloWorld() print("Hello World") return TRUE end return helloWorld() end ► function helloWorld() print("Hello World") return TRUE end function onUse(cid, item, fromPosition, itemEx, toPosition) return helloWorld() end Note a diferença entre o segundo e o terceiro exemplos. Em ambos, a função principal é a “onUse”, porém, em um dos casos foi usado o operador “local” destacando a função secundária, que se encontrava embutida na função principal, ou seja, “abaixo” da função principal. • “If” = É usado para definir condições. Ele é bastante usado para tornar o script restrito ao uso não programado. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) > 10 then print("O jogador possui level maior que 10") end return TRUE end Neste exemplo, o código só poderá ser usado para jogadores com level maior que 10 e retornará a mensagem “O jogador possui level maior que 10”. • “Elseif” = Assim como o “if”, é usado para definir condições, porém, seu uso deve estar obrigatoriamente associado ao “if”. Este operador define outras condições para que o código entre em vigor. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) > 10 then print("O jogador possui level maior que 10") elseif getPlayerLevel(cid) == 10 then print("O jogador possui level 10") end return TRUE end Neste exemplo, caso o jogador tenha level maior que 10, o código retornará a mensagem “O jogador possui level maior que 10”, mas se o jogador tiver level 10, o código retornará a mensagem “O jogador possui level 10”. Note que para usar o “elseif”, antes tive de usar um “if”. • “For” = É usado para fazer loops no código, executando várias ações ao mesmo tempo. Seu uso é indicado para encurtamento de scripts, fazendo com que leve menos tempo para o código ser processado e economizando memória. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) local pos = { {x=1, y=2, z=3}, {x=4, y=5, z=6} } for a = 1,2 do doSummonCreature("rat", pos[a]) end return TRUE end Neste exemplo, uma tabela indica as posições onde serão sumonados os monstros. O “for” foi usado para indicar que deveriam ser sumonados 1 rat em cada uma das posições especificadas na tabela. • “While” = É usado para fazer loops no código, porém, diferente do “for”, este executa a ação até ser interrompido. Não é muito usado em OpenTibia pelo fato de usar muita memória para ser executado. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) local i = 0 while i < 10 do print (i) i = i + 1 end return TRUE end No caso acima, a variável “i” foi definida inicialmente como sendo zero. Quando o código é executado, os valores assumidos por “i” são retornados até que “i” chegue ao valor nove, que é quando o código se encerra. • “Else” = É usado para definir o que será feito caso a condição definida anteriormente seja falsa ou verdadeira, de acordo com o código e com o que se deseja. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) >= 10 then print("O jogador possui level 10 ou mais") else print("O jogador possui level 9 ou menos") end return TRUE end Note que foi usado anteriormente um “if” para a definição da condição. Neste exemplo, caso o jogador tenha level 10 ou mais, será retornada a mensagem “O jogador possui level 10 ou mais”. Mas se o jogador não tiver atingido level 10, será retornado “O jogador possui level 9 ou menos”. Operadores matemáticos em LUA Após entender a função de cada operador de linguagem acima, podemos passar aos operadores matemáticos ou “Operadores relacionais”. São usados para fazer a comparação numérica ou de uma string. Veja abaixo: • “<” = É usado para dizer que algo é “menor que” outro. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) < 8 then print("O jogador não possui vocação, pois seu level é menor que oito") end return TRUE end A comparação feita mostra se o jogador possui vocação de acordo com seu level, mostrando se ele tem level mínimo para ter vocação, visto que no Tíbia, jogadores abaixo do level 8 não possuem vocação. • “>” = O inverso de seu antecessor. É usado para dizer que algo é “maior que” outro. Exemplo de uso: ►function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) > 8 then print("O jogador pode posuir vocação") end return TRUE end Neste caso, o código retornará que o jogador pode possuir alguma vocação pois possui level maior que 8. •“<=” = Este operador faz a comparação que algo é “menor ou igual” que/a outro. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) <= 8 then print("O jogador não pode usar exura") end return TRUE end Neste exemplo, o código verifica se o jogador possui level 8 ou menos para dizer se ele pode ou não usar exura, visto que no Tíbia o jogador só pode usar exura se tiver level 9 ou maior. • “>=” = Este operador faz a comparação que algo é “maior ou igual” que/a outro. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) >= 9 then print("O jogador pode usar exura") end return TRUE end Neste caso, o código verifica se o jogador possui level 9 ou mais para dizer se ele pode ou não usar exura. • “==” = Este operador faz a comparação de igualdade. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) == 8 then print("O jogador já pode abandonar rookgaard") end return TRUE end A comparação feita mostra se o level do jogador é ou não 8. Se for 8, o código retorna a mensagem “O jogador já pode abandonar rookgaard”. • “~=” = Este operador faz a comparação de diferença. Exemplo de uso: ► function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) ~= 10 then print("Somente jogadores com level 10 podem usar") end return TRUE end O exemplo restringe o uso apenas a jogadores com level 10. Se o jogador não possuir level 10, o código retorna a mensagem “Somente jogadores com level 10 podem usar”. _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._. Bom, é isso. Tentei fazer um tutorial completo e que ajudasse quem quisesse aprender a linguagem. Tutorial feito totalmente por mim. Espero que esteja bom e espero comentários também. @Editado Editado a fim de corrigir alguns erros de ortografia e nos scripts. Será que ganho um ponto de reputação?1 ponto -
Bem, Eu sei que eu estou um pouco mal falado aqui.. Mais eu quero agradar vocês com um mapa que eu tinha feito tempo atras, peguei e Mudei totalmente.. Na minha mente está cidade está pequena, mas eu acho que daria bem para Rook, Mas pode ser Main também, sejá de sua escolha. Bem, Está cidade eu peguei umas partes de um Mapa, De um Server Próprio, e editei. Se o dono do server não gostar do Map, e quizer que eu tire, avontade, Eu tiro o Map. Começando, Vou Mostrar as Print Screens. Temple http://img143.imageshack.us/i/templo.jpg/ Depot http://img571.imageshack.us/i/depotx.jpg/ Shops http://img413.imageshack.us/i/shops2.jpg/ Houses http://img156.imageshack.us/i/housest.jpg/ Mini-Map http://img243.imageshack.us/i/minimap.jpg/ Gostou? Então vamos Baixar. Download Map Scan map Os Trainers estão daquele geito (sem monster) Pois no meu server aqueles itens de boneco e a Mira são os trainers, espero que entendam, é só tirar aquilo e por os trainers. Obrigado! Abraços, Espero que goste do Map! P.s.: Eu sei que a city ta quadrada, não tem como reformular, ela é uma fortaleza. Créditos: 70% Nivaldo (Fazer o mapa) 30$ Equipe XSoft (Dar uma Base ao mapa)1 ponto
-
Pecou no blur.. Tipografia, poderia ter evitado o nome do person.. ou ter deixado ela menor. Com ela você criou dois pontos focais e.e E ilu ficou meio fail.. Mas cara, vou falar.. Você ta melhorando, só precisa praticar mais1 ponto
-
kk fiz meio rápido pois to meio sem tempo.. a tipo eu nao tinha uma boa ai coloqei essa mesma1 ponto
-
[Talkaction] Comprar Amulet Of Loss
groku reagiu a Henrique Moura por um tópico no fórum
Me autoriza a organizar seu tópico, groku?1 ponto -
Sgin Abstrata
nessapcs11 reagiu a Tonynh por um tópico no fórum
@ChocolateLaka Encontrei uns tutoriais/guias de tipografia, e queria te passar... Por favor, leia até o final, pra você entender o que queremos dizer.. • Link 1 • Link 2 • Link 3 - Esse efeito também é legal pra começar =) Espero ter ajudado. Abraços1 ponto -
Uau, como sempre dando show em script Vodkart.. Eu realmente precisava desses script para por na Quest.. Muito Util.. Testei aqui, e funfo. Boa Vodkart! -Davi1 ponto
-
[Encerrado] Slayer Yurots Sql 8.50
Henrique Moura reagiu a luisfe23 por um tópico no fórum
Achei um 8.54: Link : http://www.xtibia.com/forum/topic/134254-new-slayer-yurots-854-ao-857/ Abraços.1 ponto -
1° - vodkart 2° - davialves 3° - moskitinho1 ponto
-
[ Talkaction ]Aol's System
supraaxx reagiu a matheus1000 por um tópico no fórum
Olá Xtibianos, estou aqui para mostrar uma Talkaction minha, muito fácil de fazer. Vá em 'talkactions.xml' e bote: <talkaction words="!buyaol;!sellaol" script="aol.lua"/> Em 'talkactions/scripts' crie uma pasta chamada aol.lua e bote isso dentro dela: function onSay(cid, words, param) if(words == "!buyaol") then if(doPlayerRemoveMoney(cid, 10000) == TRUE) then doPlayerAddItem(cid,2173,1) doSendMagicEffect(getCreaturePosition(cid),tmp, CONST_ME_MAGIC_RED) else doPlayerSendCancel(cid, "Você não tem o dinheiro suficiente.") return TRUE end elseif(words == "!sellaol") then if doPlayerRemoveItem(cid,2173,1) == TRUE then doPlayerAddMoney(cid, 10000) doSendMagicEffect(getCreaturePosition(cid),tmp, CONST_ME_MAGIC_RED) else doPlayerSendCancel(cid, "Você não tem o Amulet of Loss(AoL)") end end return TRUE end Pronto =D está feito seu comando !buyaol e !sellaol. Créditos: MasterMathw ByeBye ;D.1 ponto -
Cara, muito poucos (quase ninguém ou ninguém) baixam servidores sem ss's e sem scan. Aconselho adicionar esses itens para que seu server tenha fututo.1 ponto
-
Tipos De Bordas :p
Henrique Moura reagiu a Blinkrox por uma questão
Galera Hoje tava Disponivel no PhotoShop e Kis e Kis tentar botar borda da imagem peguei uma imagem e consigui tals ;P-1 pontos -
Presente Do Snooz
Henrique Moura reagiu a fsg por um tópico no fórum
#Todos que postaram Então, ta legal msmo? Eu curti mtoo e o Snooz estas dicas estão indo aii. Abraços.-1 pontos -
-1 pontos