Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 01/27/11 em todas áreas
-
Azeroth Server Updated 14/07/2011: v1.0 Outras Versões: v1.1 [8.60]: http://www.xtibia.co...oth-rpg-reborn/ v2.0 [9.60]: http://www.xtibia.com/forum/topic/205054-960-azeroth-rpg/ Versão: 8.70 Distro: Crystal Server Mapa Base: Yourots Edited e Mix Yourots Features: > 7 Cidades: Azeroth Avalon Zatur Liberty Bay Gloria Sand Trap Tiquanda > Montarias por quest(NPC Mount Master, cavernas ao norte de Azeroth). > NPCs de Travel/Boat diferentes para cada cidade. > Corrigidos Vários Bugs do mapa. > Templo Reformado > Retirados Vários Itens custom e suas quests do antigo Riot Server. > Adicionada Dragon Dungeon. > Adicionado Vulcão de Goroma. > Adicionada Quest Especial em Gloria (NPC Gloria Scientist). > Adicionada Ferumbras Tower. > Várias Hunts adicionadas. > Adicionada Formorgar Mines. > Sistema de Refinamento e Slot. > 6 Novas Mounts. > Principais Quests: Annihilator Pits of Inferno The Inquisition FireWalker Boots Demon Helmet Draken Hell Conquer > 23 Raids Automáticas e configuradas: > Sistema de Guerras pelo Castelo [Honor Castle, a oeste de Azeroth] Evento automático. Quando a guerra é anunciada as guilds podem batalhar pelo controle do castelo, dando use no monumento do último andar e permanecendo assim até a guerra acabar. O último jogador a ter o controle do castelo antes do tempo acabar será o vencedor, e sua guild se tornará dona do castelo. Todos os membros da Guild ganharão uma recompensa e poderão acessar o mapa do subsolo. Os membros de outras Guilds serão teleportados para o templo e não poderão acessar o castelo. O sistema envia mensagens a todos antes de o evento começar, quando começar, quando o dono do castelo muda, antes de se finalizar e ao finalizar, relatando o conquistador do castelo e a guild vencedora. Imagens: Raids Castle Upgrade & Slot System Não há teleports diretos para hunts ou quests. Não há items ou monstros editados(além dos trainers). Não há sistema VIP(premium account valorizada). Não há raids com monstros excessivamente fortes nas cidades iniciais. Acc God: 2/password Créditos:Unknow YourOts Edited, Mix Yourots Team, Crystal Server Team, Tryller, Mock, TFS Team e um pouquinho (bem pouquinho) pra mim xD. Source - IP Changer 8.70 - Utilitários(opcional) - Map Editor *Utilitários inclui: Lista com códigos de todos os looktypes, SQLite Studio 1.1.1, códigos das cores dos outfits e o OTRestarter. Download Azeroth Server V 1.0 - Completo [MEDIAFIRE] Comandos: !war para executar a guerra pelo castelo manualmente, !reset para interromper o funcionamento da war e !castle para limpar todos os dados, ou seja, o castelo volta a ser terra de ninguém. V 0.2 V 0.3 V 0.4 V 1.0 Último pedido meu: encham o saco dos adms pra colocarem o tópico do tryller como fixo. É o melhor distro 8.70 que nós temos aqui, talvez ele salve os ots 8.70 daqui pra frente Contato: vmspk@hotmail.com Edit - Coloquei os Scans Edit2 - Adicionado comando Edit3 - Atualização Edit4 - Atualização http://img208.images...claymorepsf.jpg2 pontos
-
Tutorial Adicionando Sprites ao Client. Bom galera, este é um tutorial completissímo sobre criação de outfits, desde a criação até colocar ele no seu ot e poder andar com ele =D Bom o que precisaremos. 1º Paint 2º DatEditor Naum Sabe Onde Baixar o DatEditor Aki Vamos Lá, primeraimente crie um arquivo no paint 32x32. Pinte o fundo de rosa. Assim. NOTA: Para melhor editação dê um zoom 8x na imagem Ai desenharemos nosso outfit. Faça do jeito que quiser, mais lembre-se, outfit tem 12 posições(parado, andando, e segundo passo para todos os lados, NORTE SUL LESTE OESTE). Menber diz: "Terei que desenhar ele nas 12 posição?". R: Sim, terá =/ Não irei mostrar passo a passo de como desenhar um outfit porque tem varios tutoriais de como desenhar ele exemplo esse fixo do Sand Fox Bom, eu peguei o outfit do mage e editei pra ficar estilo AKATSUKI do naruto =D Menber diz: "putz, fico feio pra caralho sem sombraementp nem nada " R: Eu to ligado, mais é pra da uma idéia. Editei ele nas 12 posições NOTA: Salve seu outfit com a extensão .bmp Agora vamos colocar ele no seu OT. Menber diz "Ebaaa" R: =D NOTA: Copie a pasta do seu tibia por segurança, vai que da uma zica né Abra o DatEditor, vá em file > open Em dat coloque o arquivo Tibia.dat e em spr coloque o arquivo Tibia.spr (óóóóó) clique em open e espere... Depois que aparecer "Complete" pode fechar a telinha. Agora vá em file > new > monsters Abriu um espacinho em branco. Mude o "X Div" para 4, "Animation" para 3 e "Cropsize" para 35. Note que lá em cima em "Item Sprites" apareceu 12 zeros. O que será isso? Alguém diz: "Eu sei eu sei eu sei, tááá, naum sei" R: É as 12 posições do outfiiiiiit. (óóóóóóóó) Para preencher elas é facil mais precisa ser na ordem correta. Vá em import > sprites. Mude PNG(*.png) para BMP(*.bmp) selecione os seus 12 arquivos do outfit e abra. Eles vão para "sprites" do lado direito, deve ser os últimos. Agora para preencher os 0 é so clicar no outfit em "sprites" e apertar a tecla "insert" do seu teclado. ATENCÃOOOOOO: voce deve preencher na ordem padrão do tibia. O que seria isso? É simples o primeiro 0 é o seu outfit olhando para o NORTE, o segundo 0 zero é olhando para o LESTE, o terceiro para o SUL, o quarto para o OESTE. O quinto é ele olhando para o NORTE DANDO O PRIMEIRO PASSO, o sexto para o LESTE DANDO O PRIMEIRO PASSO, o setimo para SUL DANDO O PRIMEIRO PASSO, o oitavo para OESTE DANDO O PRIMEIRO PASSO, o nono é olhando para o NORTE dando o SEGUNDO passo e assim sucessivamente. OLHE NA FOTO PARA FICAR MELHOR. Agora tamos quase lá... Anote o Itemtype (mais para a frente voce vai descobrir porque). Ele fica na frente do X Div. Vá em file > save Abrirá a mesma janela do "open". Já deve estar preenchido os campos, mais se não estiver é do mesmo jeito que o "open". Clique em "compile". Pronto, seu outfit está no tibia já =D Agora vamos coloca-lo no seu OT. Abra a pasta do seu OT e vá em data/xml abra o arquivo outfits.xml com o bloco de notas Você pode editar um outfit já existente ou criar um novo. NOTA: Quando você atinge um valor limite de outfits, ele começa a deletar outros para substituir. Me falta a memória de quantos outfits é o maximo, mais sei que adicionar 1 não faz mal =D Para adicionar o outfit é só copiar um linha qualquer do sexo que você criou o outfit(o meu foi male) e substituir pelas informações. outfit type="1" 1 é male 0 é female. looktype="327" aqui é o Itentype que eu mandei voce anotar antes. enabled="1" 1 para habilitar 0 para desabilitar. name="Akatsuki" aqui é o nome que você quer para o addon. premium="0" 0 para free e 1 para só premium usar. Bom prontooooooooooo! Só abrir seu OT e testar ~ Créditos: 50% Meu e Do Shingo , 50% Otserver.com.br1 ponto
-
[Oficial] Real Global Map hello Galerinha do Xtibia, Venho aqui desponibilizar o mapa do Doidin (8.57 Só que editado com minhas ideias e na versão 8.60 OBS: Para rodar esse servidor No seu pc voce tem que ter 2GB+ de memória ram e em bom estado. ( nao recomendo abrir o otserv com o mapa editor aberto junto). Real Global Map: - Versão do Tibia:8.60 - Mapa global 95% full. - Quase todos os NPC's do Tibia Global. - Servidor com o mínimo de bugs possíveis. - Scripts arrumados. - Entre outros... Cidades: Quest's: Oque tem de melhor que o servidor do Doidin? Quase nada pois ele copio minhas coisas x) Algumas Print Screen: para quem nao conseguiu abrir o spolier e gostaria de ver as SS link abaixo: print screen.txt Créditos: - Doohz Rush - Doidin - Alissow - DoidinMapper - RenanSdc - TFS Team - Styller Team - Alissow Team - Feragon - Viana! - Azevedo ATUALIZADO DIA 28/10/2010 Scan: Arquivo Muito grande para fazer scan. Remeres Mapa Editor 2.0 ( nao use outra versão ou vai bugar o mapa: Download Aqui! Doohz Rush Server : Download Aqui! OBS: FOI ARRUMADO TODOS OS LOOT'S DOS MONSTROS, E FOI ADICIONADO A NOVA AREA DE ZÃO (OS Draken elite etc, todos configurados perfeitamente ) Atualização 2.2; Arrumado os Teleport's dos Drakens; Editado os seal's da POI (+ parecido com global); adicionado 1 npc de runa em northern de ZAO; arrumada as Houses, e bugs de Cormaya; Retirado BUG de money; Arrumado detalhes do mapa. MSN: Doohz_rush@hotmail.com Gostou? REP+ Ali do lado :arrow:1 ponto
-
EAE GALERA MAIS UM TOPICO INCRÍVEL! AGORA COM A COMPETIÇÃO QUE EU ESPERO QUE ALGUÉM MAIS TENHA CORAGEM E SAIA DO PC DURANTE 5 MINUTOS E FAÇA ALGO QUE PRESTE E TIRE FOTO ESTILO JV CHEQUER ROUNDHOUSE KICK, OK? AÍ VAI MEU TENTO, PRIMEIRO UMA FOTO À LA JOTAVÊ: E AGORA A TENTATIVA FALHA DE TENTAR TIRAR UMA FOTO IMITANDO O MESTRE JV, FICO ME PERGUNTANDO COMO ELE FAZ ISSO COM 150KG COM TAMANHA PERFEIÇÃO. EM DEZ TENTOS, NÃO CONSEGUI NENHUMA FOTO BOA, ENTÃO FICA ESSA: PORRA, TIREM TBM FDPS. N QUERO FICAR COM CARA DE OT@RIO PROMETO DAR 20 REAIS PRA QUEM TIRAR A MELHOR FOTO. ABRAÇOS.1 ponto
-
Change Hit Color / Mude A Cor Do Hit De Sua Magia!
Tottinxd reagiu a ElitePally por um tópico no fórum
Eae xTibianos , como voces leram aqui, vamos logo ao trabalho OBs: estou usando um teclado americano, nao botarei acentos. MAO NA OBRA! Vou explicar como e o sistema * Voce pode trocar a "cor" da damage, por exemplo sabem da SD quando ela vai hitar fica um Hit com cor vermelho escuro, porem esta nao e a cor igual do tibia global, a cor e marrom escuro! * Eu mesmo botei no meu server ficou mais legal com outras cores os danos. Vamos na obra. Abra seu Spell desejado e adicione esta linha em seu script: Para ataque corpo a corpo adicione isto: Para ataque com distance adicone isto: Explicando: O numero "78" e o numero da cor do dano, por exemple este e o dano de cor marrom escuro. Para ver os numeros das cores veja no seu directorio C:\Documents and Settings\Administrador\Desktop\Seuserver\data\lib\constant.lua Para os que nao acharam vou postar aqui a linha: Estes sao os numeros das cores, para adicionar no seu script , adicione o numero da cor la aonde eu mostrei. Vou postar meu script da magia "Exori Mort" Obrigado. Postem se tiverem duvidas!/i] Credits: By Me[Criado por mim] Eu acho que isto vai ajudar bastante quem usa servidores dedicados. Um jeito mais real. ATE MAIS! Gostou? Rep +++1 ponto -
Programação.lua ( Super Teórico, Muita Leitura )
PostadorHunter 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!1 ponto -
O Brasão - Maldição Da Magia
Gabriel Couto reagiu a Henrique Moura por um tópico no fórum
Maldição da Magia Saia para uma nova caçada. Os campos ao leste de Thais haviam sidos pacificados desde a posse do novo rei. Talvez isso o proporcionasse essa nova coragem que dava essa sensação de poder à ele. Ele nunca foi assim, nunca se sentiu assim. As muralhas eram grandes e certamente era difícil escalá-las, mas ele saberia que o que esperava por ele era muito maior do que qualquer caminho que teria de percorrer, e então prosseguiu sem hesitação em nenhum momento. Ele só queria chegar ao topo, fazer seu trabalho, voltar ao rei e pegar a recompensa. Era um mercenário, não se importava com ninguém ou com algo. Que se dane para que o rei iria utilizar tal pedra, isso não seria mais problema dele, ele só queria fazer-lhe o melhor: ser rico. A cada gota de suor que derramava sobre a escalada lembrava-se de moedas de ouros escorregando sobre os seus dedos e caindo sobre um baú cheio delas. Ele era doente, sua doença poderia ser comparada a dos anões por cerveja, ou a de trolls por sujeira. Mas o que o diferenciava disso tudo era uma coisa, que talvez fosse a mais importante de sua vida. Ele era um homem. Finalmente, só mais um pouco, ele estava quase lá. De repente um rugido forte, pedras caíram sobre ele, ele resistiu, mas não poderia permanecer por muito tempo, sua mão estava machucada e a pressão do vento sobre o seu corpo o empurrava contra a montanha de rochas pontiagudas, o que o machucava seriamente. Ele resistiu por um tempo, até o vento cessou. Continuou a subida. O que o atraí para esses perigos que provavelmente nunca o trará vivo de volta é apenas o ouro. Esse rapaz tornou-se altamente subornável e corrompido pela riqueza, seu coração foi corrompido. Ouro era tudo que pensava. Mas talvez isso esteja relacionado com a morte de seus pais. Talvez. Afinal, é triste a morte de aldeões quando não podem pagar os impostos. Mas isso não torna o fato surreal. Os reinos antigos eram muito severos, principalmente nas terras do norte. Ele ainda se lembrava daquela noite. Eles estavam quase sem comida, mal tinham moedas para sobreviverem, estavam juntando migalhas para comer e poder assim juntar dinheiro para a taxa do reino. Foi inútil, os soldados invadiram a pequena casa, procuraram por qualquer material de valor e não encontraram nada. Julgaram pouco o que lhe deram, e então, usando o nome do rei, eles assinaram brutalmente os seus pais. O sangue deles espirrou em seu rosto, e junto às lagrimas criaram uma memória atormentadora inesquecível. Vinte anos. Ele viveu todo esse tempo relembrando a crueldade do rei toda noite, era uma perturbação constante. As memórias perdiam a intensidade, mas quando ele ingressava num trabalho, elas vinham com toda a intensidade. Apesar do seu amor pelas moedas de ouro, as próprias traziam essas lembranças. Esse amor pelas moedas era difícil de entender. Ele deveria odiá-las, foi por causa delas que seus pais foram mortos. Não, talvez, por escassez delas. Se eles as tivessem, não teriam sido mortos. Era esse o seu receio. Chegou ao topo de montanha, cansado. Esvaziou o seu odre de água e recuperou o fôlego. Retirou sua espada da bainha e caminhou em frente lentamente. _DRAGÃO! O grito furioso ecoou por toda a montanha, ressoando em cada estalagmite e estalactites dos túneis sob a montanha. Um rugido forte e monstruoso foi ouvido, e então ele correu na direção deste rugido. As paredes de um túnel que ele havia recém entrado foram surpreendidas por chamas altas e fortes, que logo cessou quando foi procedida por um rugido ensurdecedor. O dragão agora era visível. Ele correu entre os túneis e o dragão o perseguia. Cada passo estremecia o chão e fazia que as estalactites se soltassem, cada passo fazia o chão ceder, o túnel estava desmoronando, e quando o dragão rugia, era como se a montanha inteira fosse ceder. Uma pedra caiu sobre sua cabeça e ele caiu. Tonto por alguns instantes, o dragão se aproximava. Ele abriu a sua grande boca e soltou outro furacão de fogo. Ele se virou e protegeu sua cabeça, sentiu suas costas arderem sendo queimadas pelo fogo infernal do dragão. Num ultimo desesperado ato, pegou sua espada e levantou-se. Travaria então uma batalha sangrenta com o dragão, que logo perdeu a cabeça. Triunfante após a vitória caminhou até o corpo sem cabeça do dragão, retirou da boca uma pedra vermelha e brilhante, de aspecto resistente e infinitamente maravilhoso. A entrada do túnel por onde havia entrado estava bloqueada pelo desmoronamento, só o restou andar para o outro lado. Antes que pudesse atingir a saída, os túneis que interceptavam aquele foram preenchidos por fortes e ensurdecedores rugidos vindos de todos os lados, e ele se percebeu cercado. _Wyverns? Ele mentiu pra mim, disse que só havia um dragão, não fui informado sobre Wyverns! Fui enviado à morte! Seu ódio pela corte só aumentara. Ele correu em direção a saída e os wyverns foram atrás, eram três. São menores que dragões, mas isso não faziam deles oponentes mais fracos. De modo rápido, um wyvern voou sobre os outros e então o capturou. Suas enormes garras foram cortadas pela lâmina de sua espada e ele caiu junto à elas, o wyvern caiu ao seu lado, fazendo que o chão estremecesse. Ele se sentia turvo, logo iria perder a consciência e cair em profundo desmaio. Os wyverns se aproximaram furiosos, mas antes que pudessem abocanhá-lo, foram interrompidos. Foram jogados contra o túnel outra vez, e subitamente as pedras caíram sobre eles. Os poderosos e perigosos wyverns foram mortos facilmente. Somente alguém muito poderoso poderia ter feito aquilo. Ele olhou para seu lado esquerdo e encontrou uma figura desconhecida. Usava um chapéu longo e uma túnica preta que ia do pescoço aos pés, uma capa cinzenta e um cajado marrom com uma pedra azul brilhante na ponta. Sua barba era branca e seus cabelos, de fato. O velho caminhou até ele, e então se ajoelhou ao seu lado. Recitou algumas palavras que ele não pode ouvir, mas então se sentia melhor. O estado de lucidez voltara. _Quem és? Por que me ajudas? O velho desapareceu subitamente. Ele, espantado, recolheu suas coisas e desejava sair daquele lugar o mais rápido possível, reivindicar suas moedas de ouro e sair da cidade em busca de outro trabalho. No sopé da montanha, antes que pudesse montar seu cavalo, ele viu o velho outra vez. Estava parado observando-o com uma expressão de alegria. Ele não ligou, montou em seu cavalo e seguiu na direção oeste, mas antes que pudesse ser perdido de vista no horizonte alaranjado, ouviu a voz do velho. _A propósito, me chamo Ferumbras. O velho desapareceu. O jovem mercenário tentou olhar para trás, mas sentiu uma forte dor no peito. Caiu do cavalo e sua própria espada perfurou seu peito. A pedra ao seu lado foi tingida de vermelho.1 ponto -
[Talkactions]Sistema M1 Do Xotservx
hypersonico reagiu a oiacaio por um tópico no fórum
Pessoal venho aqui trazer o sistema de move do xotservx, mas com todos 151 pokes(nao tem os movements dos shinys), tenho o m1 e o m2, que achei em um serve, nao sei quem fez, mas vou postar aqui pra vocês pra facilitar a edição das spells. M1: function isSummon(uid) return uid ~= getCreatureMaster(uid) or false end function doSendMagicEffectInArea(pos,effect,area,cid) -- Function by mock local centro = {} centro.y = math.floor(table.getn(area)/2)+1 for y = 1, table.getn(area) do for x = 1, table.getn(area[y]) do if area[y][x] > 0 then centro.x = math.floor(table.getn(area[y])/2)+1 if type(effect) == 'table' then doSendMagicEffect({x=pos.x+x-centro.x,y=pos.y+y-centro.y,z= pos.z},(effect[area[y][x]] or 0),cid) else doSendMagicEffect({x=pos.x+x-centro.x,y=pos.y+y-centro.y,z= pos.z},effect or 0,cid) end end end end return true end function getTime(s) -- by : Mkalo. local n = math.floor(s / 60) s = s - (60 * n) return n, s end -- AREAS -- local arr1 = { {1, 1, 1}, {1, 0, 1}, {1, 1, 1}, } local arr2 = { {0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 0, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, } local pokes = { ["Bulbasaur"] = {attackname = "Quick Attack", level = 1, storage = 1900, cd = 2, atkmin = 40, atkmax = 60, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Ivysaur"] = {attackname = "Quick Attack", level = 40, storage = 1900, cd = 2, atkmin = 100, atkmax = 150, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Venusaur"] = {attackname = "Quick Attack", level = 85, storage = 1900, cd = 2, atkmin = 160, atkmax = 210, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Charmander"] = {attackname = "Scratch", level = 1, storage = 1901, cd = 2, atkmin = 30, atkmax = 50, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Charmeleon"] = {attackname = "Scratch", level = 40, storage = 1901, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Charizard"] = {attackname = "Scratch", level = 85, storage = 1901, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Squirtle"] = {attackname = "Headbutt", level = 1, storage = 1902, cd = 2, atkmin = 40, atkmax = 60, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Wartortle"] = {attackname = "Headbutt", level = 40, storage = 1902, cd = 2, atkmin = 100, atkmax = 150, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Blastoise"] = {attackname = "Headbutt", level = 85, storage = 1902, cd = 2, atkmin = 160, atkmax = 210, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Caterpie"] = {attackname = "Headbutt", level = 1, storage = 1902, cd = 2, atkmin = 5, atkmax = 15, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Metapod"] = {attackname = "String Shot", level = 15, storage = 1903, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 137, type = COMBAT_PHYSICALDAMAGE}, ["Butterfree"] = {attackname = "String Shot", level = 35, storage = 1903, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Weedle"] = {attackname = "Horn Attack", level = 1, storage = 1904, cd = 2, atkmin = 5, atkmax = 15, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Kakuna"] = {attackname = "String Shot", level = 15, storage = 1903, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 137, type = COMBAT_PHYSICALDAMAGE}, ["Beedrill"] = {attackname = "String Shot", level = 35, storage = 1903, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Pidgey"] = {attackname = "Quick Attack", level = 1, storage = 1900, cd = 2, atkmin = 5, atkmax = 15, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Pidgeotto"] = {attackname = "Quick Attack", level = 20, storage = 1900, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Pidgeot"] = {attackname = "Quick Attack", level = 65, storage = 1900, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Rattata"] = {attackname = "Quick Attack", level = 1, storage = 1900, cd = 2, atkmin = 5, atkmax = 15, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Raticate"] = {attackname = "Quick Attack", level = 25, storage = 1900, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Spearow"] = {attackname = "Quick Attack", level = 1, storage = 1900, cd = 2, atkmin = 5, atkmax = 15, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Fearow"] = {attackname = "Quick Attack", level = 50, storage = 1900, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Ekans"] = {attackname = "Bite", level = 15, storage = 1905, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Arbok"] = {attackname = "Bite", level = 35, storage = 1905, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Pikachu"] = {attackname = "Thunder Shock", level = 20, storage = 1906, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "area", arr = arr2, effecta = 207, type = COMBAT_PHYSICALDAMAGE}, ["Raichu"] = {attackname = "Thunder Shock", level = 50, storage = 1906, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "area", arr = arr2, effecta = 207, type = COMBAT_PHYSICALDAMAGE}, ["Sandshrew"] = {attackname = "Sand Attack", level = 20, storage = 1907, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Sandslash"] = {attackname = "Sand Attack", level = 55, storage = 1907, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Nidoranfe"] = {attackname = "Quick Attack", level = 10, storage = 1900, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Nidorina"] = {attackname = "Quick Attack", level = 30, storage = 1900, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Nidoqueen"] = {attackname = "Quick Attack", level = 65, storage = 1900, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Nidoranma"] = {attackname = "Quick Attack", level = 10, storage = 1900, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Nidorino"] = {attackname = "Quick Attack", level = 30, storage = 1900, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Nidoking"] = {attackname = "Quick Attack", level = 65, storage = 1900, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Clefairy"] = {attackname = "Doubleslap", level = 20, storage = 1908, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Clefable"] = {attackname = "Doubleslap", level = 45, storage = 1908, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Vulpix"] = {attackname = "Quick Attack", level = 15, storage = 1900, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Ninetales"] = {attackname = "Quick Attack", level = 70, storage = 1900, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Jigglypuff"] = {attackname = "Doubleslap", level = 20, storage = 1908, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Wigglytuff"] = {attackname = "Doubleslap", level = 45, storage = 1908, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Zubat"] = {attackname = "Super Sonic", level = 15, storage = 1909, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Golbat"] = {attackname = "Super Sonic", level = 35, storage = 1909, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Gloom"] = {attackname = "Absorb", level = 25, storage = 1910, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 8, type = COMBAT_PHYSICALDAMAGE}, ["Vileplume"] = {attackname = "Absorb", level = 50, storage = 1910, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 8, type = COMBAT_PHYSICALDAMAGE}, ["Paras"] = {attackname = "Absorb", level = 5, storage = 1910, cd = 2, atkmin = 5, atkmax = 20, range = 1, typeattack = "intarget", effecta = 8, type = COMBAT_PHYSICALDAMAGE}, ["Parasect"] = {attackname = "Absorb", level = 50, storage = 1910, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 8, type = COMBAT_PHYSICALDAMAGE}, ["Venonat"] = {attackname = "Absorb", level = 5, storage = 1910, cd = 2, atkmin = 5, atkmax = 20, range = 1, typeattack = "intarget", effecta = 8, type = COMBAT_PHYSICALDAMAGE}, ["Venomoth"] = {attackname = "Absorb", level = 50, storage = 1910, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 8, type = COMBAT_PHYSICALDAMAGE}, ["Diglett"] = {attackname = "Sand Attack", level = 10, storage = 1907, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Dugtrio"] = {attackname = "Sand Attack", level = 35, storage = 1907, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Meowth"] = {attackname = "Slash", level = 15, storage = 1912, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Persian"] = {attackname = "Slash", level = 30, storage = 1912, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Psyduck"] = {attackname = "Water Gun", level = 20, storage = 1913, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Golduck"] = {attackname = "Doubleslap", level = 55, storage = 1908, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Mankey"] = {attackname = "Scratch", level = 15, storage = 1901, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Primeape"] = {attackname = "Scratch", level = 35, storage = 1901, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Growlithe"] = {attackname = "Roar", level = 20, storage = 1914, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Arcanine"] = {attackname = "Roar", level = 90, storage = 1914, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Poliwag"] = {attackname = "Doubleslap", level = 5, storage = 1908, cd = 2, atkmin = 5, atkmax = 20, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Poliwhirl"] = {attackname = "MudShot", level = 25, storage = 1915, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Poliwrath"] = {attackname = "MudShot", level = 65, storage = 1915, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Abra"] = {attackname = "Psybeam", level = 20, storage = 1916, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "direcion", effectdir0 = 108, effectdir1 = 109, effectdir2 = 108, effectdir3 = 106, effectdir4 = 107, effectdir5 = 106, effectdir6 = 108, effectdir7 = 109, effectdir8 = 108, effectdir9 = 107, effectdir10 = 106, effectdir11 = 107, type = COMBAT_PHYSICALDAMAGE}, ["Kadabra"] = {attackname = "Psybeam", level = 45, storage = 1916, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "direcion", effectdir0 = 108, effectdir1 = 109, effectdir2 = 108, effectdir3 = 106, effectdir4 = 107, effectdir5 = 106, effectdir6 = 108, effectdir7 = 109, effectdir8 = 108, effectdir9 = 107, effectdir10 = 106, effectdir11 = 107, type = COMBAT_PHYSICALDAMAGE}, ["Alakazam"] = {attackname = "Psybeam", level = 80, storage = 1916, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "direcion", effectdir0 = 108, effectdir1 = 109, effectdir2 = 108, effectdir3 = 106, effectdir4 = 107, effectdir5 = 106, effectdir6 = 108, effectdir7 = 109, effectdir8 = 108, effectdir9 = 107, effectdir10 = 106, effectdir11 = 107, type = COMBAT_PHYSICALDAMAGE}, ["Machop"] = {attackname = "Triple Punch", level = 20, storage = 1917, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 110, type = COMBAT_PHYSICALDAMAGE}, ["Machoke"] = {attackname = "Triple Punch", level = 47, storage = 1917, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 110, type = COMBAT_PHYSICALDAMAGE}, ["Machamp"] = {attackname = "Triple Punch", level = 70, storage = 1917, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 110, type = COMBAT_PHYSICALDAMAGE}, ["Bellsprout"] = {attackname = "Razor Leaf", level = 10, storage = 1918, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 79, type = COMBAT_PHYSICALDAMAGE}, ["Weepinbell"] = {attackname = "Razor Leaf", level = 25, storage = 1918, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 79, type = COMBAT_PHYSICALDAMAGE}, ["Victreebel"] = {attackname = "Razor Leaf", level = 50, storage = 1918, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 79, type = COMBAT_PHYSICALDAMAGE}, ["Tentacool"] = {attackname = "Acid", level = 15, storage = 1928, cd = 2, atkmin = 10, atkmax = 30, range = 1, typeattack = "intarget", effecta = 20, type = COMBAT_PHYSICALDAMAGE}, ["Tentacruel"] = {attackname = "Super Sonic", level = 75, storage = 1909, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Geodude"] = {attackname = "Rock Throw", level = 15, storage = 1919, cd = 2, atkmin = 10, atkmax = 30, range = 1, typeattack = "intarget", effecta = 34, type = COMBAT_PHYSICALDAMAGE}, ["Graveler"] = {attackname = "Rock Throw", level = 40, storage = 1919, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 34, type = COMBAT_PHYSICALDAMAGE}, ["Golem"] = {attackname = "Rock Throw", level = 70, storage = 1919, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 34, type = COMBAT_PHYSICALDAMAGE}, ["Ponyta"] = {attackname = "Quick Attack", level = 20, storage = 1900, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Rapidash"] = {attackname = "Quick Attack", level = 55, storage = 1900, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Slowpoke"] = {attackname = "Aqua Tail", level = 20, storage = 1920, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Slowbro"] = {attackname = "Aqua Tail", level = 45, storage = 1920, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Magnemite"] = {attackname = "Super Sonic", level = 15, storage = 1909, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Magneton"] = {attackname = "Super Sonic", level = 45, storage = 1909, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Farfetch'd"] = {attackname = "Sand Attack", level = 40, storage = 1907, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Doduo"] = {attackname = "Sand Attack", level = 10, storage = 1907, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Dodrio"] = {attackname = "Sand Attack", level = 45, storage = 1907, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Seel"] = {attackname = "Headbutt", level = 20, storage = 1902, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Dewgong"] = {attackname = "Aqua Tail", level = 45, storage = 1920, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Grimer"] = {attackname = "Mud Shot", level = 15, storage = 1915, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Muk"] = {attackname = "Mud Shot ", level = 35, storage = 1915, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Shellder"] = {attackname = "Lick", level = 10, storage = 1921, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 145, type = COMBAT_PHYSICALDAMAGE}, ["Cloyster"] = {attackname = "Lick", level = 60, storage = 1921, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 145, type = COMBAT_PHYSICALDAMAGE}, ["Gastly"] = {attackname = "Lick", level = 20, storage = 1921, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 145, type = COMBAT_PHYSICALDAMAGE}, ["Haunter"] = {attackname = "Lick", level = 45, storage = 1921, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 145, type = COMBAT_PHYSICALDAMAGE}, ["Gengar"] = {attackname = "Lick", level = 80, storage = 1921, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 145, type = COMBAT_PHYSICALDAMAGE}, ["Onix"] = {attackname = "Sand Attack", level = 50, storage = 1907, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Drowzee"] = {attackname = "Headbutt", level = 25, storage = 1902, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Hypno"] = {attackname = "Headbutt", level = 55, storage = 1902, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Krabby"] = {attackname = "Bubbles", level = 10, storage = 1922, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Kingler"] = {attackname = "Bubbles", level = 40, storage = 1922, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Voltorb"] = {attackname = "Thunder Shock", level = 10, storage = 1906, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "area", arr = arr2, effecta = 207, type = COMBAT_PHYSICALDAMAGE}, ["Electrode"] = {attackname = "Thunder Shock", level = 35, storage = 906, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "area", arr = arr2, effecta = 207, type = COMBAT_PHYSICALDAMAGE}, ["Exeggcute"] = {attackname = "Hypnosis", level = 15, storage = 1923, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "area", arr = arr2, effecta = 136, type = COMBAT_PHYSICALDAMAGE}, ["Exeggutor"] = {attackname = "Hypnosis", level = 55, storage = 1923, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "area", arr = arr2, effecta = 136, type = COMBAT_PHYSICALDAMAGE}, ["Cubone"] = {attackname = "Headbutt", level = 10, storage = 1902, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Marowak"] = {attackname = "Headbutt", level = 55, storage = 1902, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Hitmonlee"] = {attackname = "Triple Kick Lee", level = 60, storage = 1924, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 110, type = COMBAT_PHYSICALDAMAGE}, ["Hitmonchan"] = {attackname = "Triple Punch", level = 60, storage = 1924, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 110, type = COMBAT_PHYSICALDAMAGE}, ["Lickitung"] = {attackname = "Lick", level = 55, storage = 1921, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 145, type = COMBAT_PHYSICALDAMAGE}, ["Koffing"] = {attackname = "Mud Shot", level = 15, storage = 1915, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Weezing"] = {attackname = "Mud Shot", level = 35, storage = 1915, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Chansey"] = {attackname = "Doubleslap", level = 60, storage = 1908, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Tangela"] = {attackname = "Absorb", level = 50, storage = 1910, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 8, type = COMBAT_PHYSICALDAMAGE}, ["Kangaskhan"] = {attackname = "Bite", level = 80, storage = 1905, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Horsea"] = {attackname = "Mud Shot", level = 10, storage = 1915, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Seadra"] = {attackname = "Mud Shot", level = 45, storage = 1915, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Goldeen"] = {attackname = "Horn Attack", level = 10, storage = 1904, cd = 2, atkmin = 10, atkmax = 25, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Seaking"] = {attackname = "Horn Attack", level = 45, storage = 1904, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Staryu"] = {attackname = "Swift", level = 15, storage = 1925, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 7, type = COMBAT_PHYSICALDAMAGE}, ["Starmie"] = {attackname = "Swift", level = 35, storage = 1925, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 7, type = COMBAT_PHYSICALDAMAGE}, ["Mr.Mime"] = {attackname = "Doubleslap", level = 60, storage = 1908, cd = 2, atkmin = 90, atkmax = 160, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Scyther"] = {attackname = "Quick Attack", level = 80, storage = 1900, cd = 2, atkmin = 160, atkmax = 210, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Jynx"] = {attackname = "Lovely Kiss", level = 80, storage = 1926, cd = 2, atkmin = 160, atkmax = 210, range = 1, typeattack = "intarget", effecta = 147, type = COMBAT_PHYSICALDAMAGE}, ["Electabuzz"] = {attackname = "Quick Attack", level = 80, storage = 1900, cd = 2, atkmin = 160, atkmax = 210, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Magmar"] = {attackname = "Scratch", level = 80, storage = 1901, cd = 2, atkmin = 160, atkmax = 210, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Pinsir"] = {attackname = "Scratch", level = 45, storage = 1901, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Tauros"] = {attackname = "Headbutt", level = 45, storage = 1902, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Magikarp"] = {attackname = "Splash", level = 5, storage = 1927, cd = 2, atkmin = 5, atkmax = 15, range = 1, typeattack = "intarget", effecta = 53, type = COMBAT_PHYSICALDAMAGE}, ["Gyarados"] = {attackname = "Roar", level = 85, storage = 1914, cd = 2, atkmin = 160, atkmax = 215, range = 1, typeattack = "intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Lapras"] = {attackname = "Horn Attack", level = 80, storage = 1904, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Eevee"] = {attackname = "Sand Attack", level = 20, storage = 1907, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Vaporeon"] = {attackname = "Quick Attack", level = 55, storage = 1900, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Jolteon"] = {attackname = "Quick Attack", level = 55, storage = 1900, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Flareon"] = {attackname = "Quick Attack", level = 55, storage = 1900, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Porygon"] = {attackname = "Super Sonic", level = 40, storage = 1909, cd = 2, atkmin = 70, atkmax = 130, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Omanyte"] = {attackname = "Bite", level = 20, storage = 1905, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Omastar"] = {attackname = "Bite", level = 80, storage = 1905, cd = 2, atkmin = 160, atkmax = 210, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Kabuto"] = {attackname = "Scratch", level = 20, storage = 1901, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Kabutops"] = {attackname = "Scratch", level = 80, storage = 1901, cd = 2, atkmin = 160, atkmax = 210, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Snorlax"] = {attackname = "Scratch", level = 80, storage = 1901, cd = 2, atkmin = 160, atkmax = 210, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Dratini"] = {attackname = "Aqua Tail", level = 20, storage = 1920, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Dragonair"] = {attackname = "Headbutt", level = 60, storage = 1902, cd = 2, atkmin = 100, atkmax = 150, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Dragonite"] = {attackname = "Headbutt", level = 100, storage = 1902, cd = 2, atkmin = 170, atkmax = 220, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Rhydon"] = {attackname = "Iron Tail", level = 30, storage = 1929, cd = 2, atkmin = 60, atkmax = 80, range = 1, typeattack = "intarget", effecta = 160, type = COMBAT_PHYSICALDAMAGE}, ["Rhydon"] = {attackname = "Iron Tail", level = 75, storage = 1929, cd = 2, atkmin = 150, atkmax = 200, range = 1, typeattack = "intarget", effecta = 160, type = COMBAT_PHYSICALDAMAGE}, } function onSay(cid, words, param, target) if #getCreatureSummons(cid) == 0 then return doPlayerSendCancel(cid, "You do not have any pokemon.") end if getPlayerStorageValue(cid, 102032) == 1 then doPlayerSendCancel(cid, "Your pokemon is exhausted.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end for i,x in pairs(pokes) do local storage = x.storage local cd = x.cd if getCreatureSummons(cid) ~= 0 then if not getTilePzInfo(getPlayerPosition(cid)) then if getCreatureName(getCreatureSummons(cid)[1]) == i then if getCreatureTarget(cid) ~= 0 then if not isSummon(getCreatureTarget(cid)) or not isPlayer(getCreatureTarget(cid)) then if getPlayerLevel(cid) >= x.level then if os.time()-getPlayerStorageValue(cid, storage) <= cd then minutes,seconds = getTime(cd-(os.time()-getPlayerStorageValue(cid, storage))) return doPlayerSendTextMessage(cid, 26, "You need to wait ".. seconds .. " seconds to use " ..x.attackname..".") end if x.typeattack == "distance" then if getDistanceBetween(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid))) <= x.range then doSendDistanceShoot(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid)), x.effectd) doSendMagicEffect(getCreaturePosition(getCreatureTarget(cid)), x.effecta) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) doCreatureSay(cid, ""..i..", "..x.attackname..".", 1) setPlayerStorageValue(cid, storage, os.time()+cd) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) else doPlayerSendCancel(cid, "Target is far away.") doSendMagicEffect(getCreaturePosition(cid), 2) end return true end if x.typeattack == "area" then if getDistanceBetween(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid))) <= x.range then doSendMagicEffectInArea(getCreaturePosition(getCreatureSummons(cid)[1]),x.effecta,x.arr) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) doCreatureSay(cid,""..i..", "..x.attackname..".", 1) setPlayerStorageValue(cid, storage, os.time()+cd) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) else doPlayerSendCancel(cid, "Target is far away.") doSendMagicEffect(getCreaturePosition(cid), 2) end return true end if x.typeattack == "direcion" then if getDistanceBetween(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid))) <= x.range then if getCreatureLookDir(getCreatureSummons(cid)[1]) == 0 then doSendMagicEffect(getPositionByDirection(getCreaturePosition(getCreatureSummons(cid)[1]), 0, 1),x.effectdir0) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) setPlayerStorageValue(cid, storage, os.time()+cd) doCreatureSay(cid,""..i..", "..x.attackname..".", 1) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) elseif getCreatureLookDir(getCreatureSummons(cid)[1]) == 1 then doSendMagicEffect(getPositionByDirection(getCreaturePosition(getCreatureSummons(cid)[1]), 1, 1),x.effectdir1) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) setPlayerStorageValue(cid, storage, os.time()+cd) doCreatureSay(cid,""..i..", "..x.attackname..".", 1) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) elseif getCreatureLookDir(getCreatureSummons(cid)[1]) == 2 then doSendMagicEffect(getPositionByDirection(getCreaturePosition(getCreatureSummons(cid)[1]), 2, 1),x.effectdir2) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) setPlayerStorageValue(cid, storage, os.time()+cd) doCreatureSay(cid,""..i..", "..x.attackname..".", 1) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) elseif getCreatureLookDir(getCreatureSummons(cid)[1]) == 3 then doSendMagicEffect(getPositionByDirection(getCreaturePosition(getCreatureSummons(cid)[1]), 3, 1),x.effectdir3) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) setPlayerStorageValue(cid, storage, os.time()+cd) doCreatureSay(cid,""..i..", "..x.attackname..".", 1) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) end else doPlayerSendCancel(cid, "Target is far away.") doSendMagicEffect(getCreaturePosition(cid), 2) end return true end if x.typeattack == "intarget" then if getDistanceBetween(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid))) <= x.range then doSendMagicEffect(getCreaturePosition(getCreatureTarget(cid)), x.effecta) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) doCreatureSay(cid, ""..i..", "..x.attackname..".", 1) setPlayerStorageValue(cid, storage, os.time()+cd) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) else doPlayerSendCancel(cid, "Target is far away.") doSendMagicEffect(getCreaturePosition(cid), 2) end return true end else doPlayerSendTextMessage(cid, 27, "You need level "..x.level.." to use " ..x.attackname..".") doSendMagicEffect(getCreaturePosition(cid), 2) return true end else doPlayerSendCancel(cid, "Invalid Target.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end else doPlayerSendCancel(cid, "Target not is avalied.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end end else doPlayerSendCancel(cid, "Do not Attack in Protection Zone.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end else doPlayerSendCancel(cid, "You need pokemon to use attacks.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end end return true end M2 function Poison(cid) -- by miih local arrpoison = { {0, 0, 0}, {0, 1, 0}, {0, 0, 0}, } for i = 1, 6 do addEvent(doSendMagicEffect, i*1000, getCreaturePosition(getCreatureTarget(cid)), 8) addEvent(doAreaCombatHealth, i*1000, getCreatureSummons(cid)[1], COMBAT_EARTHDAMAGE, getCreaturePosition(getCreatureTarget(cid)), arrpoison, -10, -15, 8) end return true end function isSummon(uid) return uid ~= getCreatureMaster(uid) or false end function doSendMagicEffectInArea(pos,effect,area,cid) -- Function by mock local centro = {} centro.y = math.floor(table.getn(area)/2)+1 for y = 1, table.getn(area) do for x = 1, table.getn(area[y]) do if area[y][x] > 0 then centro.x = math.floor(table.getn(area[y])/2)+1 if type(effect) == 'table' then doSendMagicEffect({x=pos.x+x-centro.x,y=pos.y+y-centro.y,z= pos.z},(effect[area[y][x]] or 0),cid) else doSendMagicEffect({x=pos.x+x-centro.x,y=pos.y+y-centro.y,z= pos.z},effect or 0,cid) end end end end return true end function getTime(s) -- by : Mkalo. local n = math.floor(s / 60) s = s - (60 * n) return n, s end -- AREAS -- local arr1 = { {0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 0, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, } -- M1 System, by: XotserX. -- local pokes = { ["Bulbasaur"] = {attackname = "Razor Leaf", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 79, type = COMBAT_PHYSICALDAMAGE}, ["Ivysaur"] = {attackname = "Razor Leaf ", level = 40, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "intarget", effecta = 79, type = COMBAT_PHYSICALDAMAGE}, ["Venusaur"] = {attackname = "Razor Leaf ", level = 85, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 79, type = COMBAT_PHYSICALDAMAGE}, ["Charmander"] = {attackname = "Ember", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 35, type = COMBAT_PHYSICALDAMAGE}, ["Charmeleon"] = {attackname = "Ember", level = 40, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "intarget", effecta = 35, type = COMBAT_PHYSICALDAMAGE}, ["Charizard"] = {attackname = "Ember", level = 85, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 35, type = COMBAT_PHYSICALDAMAGE}, ["Squirtle"] = {attackname = "Bubbles", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Wartortle"] = {attackname = "Bubbles", level = 40, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Blastoise"] = {attackname = "Bubbles", level = 85, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Caterpie"] = {attackname = "String Shot", level = 1, storage = 2000, cd = 2, atkmin = 70, atkmax = 90, range = 1, typeattack = "intarget", effecta = 137, type = COMBAT_PHYSICALDAMAGE}, ["Metapod"] = {attackname = "Headbutt", level = 15, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Butterfree"] = {attackname = "Super Sonic", level = 35, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Weedle"] = {attackname = "String Shot ", level = 1, storage = 2000, cd = 2, atkmin = 70, atkmax = 90, range = 1, typeattack = "intarget", effecta = 137, type = COMBAT_PHYSICALDAMAGE}, ["Kakuna"] = {attackname = "Headbutt", level = 15, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Beedrill"] = {attackname = "Poison Sting ", level = 35, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Pidgey"] = {attackname = "Sand Attack", level = 1, storage = 2000, cd = 2, atkmin = 70, atkmax = 90, range = 1, typeattack = " direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Pidgeotto"] = {attackname = "Sand Attack ", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = " direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Pidgeot"] = {attackname = "Sand Attack ", level = 65, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = " direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Rattata"] = {attackname = "Bite", level = 1, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Raticate"] = {attackname = "Bite", level = 25, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Spearow"] = {attackname = "Sand Attack", level = 1, storage = 2000, cd = 2, atkmin = 70, atkmax = 90, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Fearow"] = {attackname = "Sand Attack", level = 50, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "direcion", effectdir0 = 122, effectdir1 = 121, effectdir2 = 120, effectdir3 = 119, type = COMBAT_PHYSICALDAMAGE}, ["Ekans"] = {attackname = "Poison Fang", level = 17, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Arbok"] = {attackname = "Poison Fang", level = 35, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Pikachu"] = {attackname = "Thunder", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "area", arr = arr1, effecta = 48, type = COMBAT_PHYSICALDAMAGE}, ["Raichu"] = {attackname = "Thunder", level = 50, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "area", arr = arr1, effecta = 48, type = COMBAT_PHYSICALDAMAGE}, ["Sandshrew"] = {attackname = "Mud Shot", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = " intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Sandslash"] = {attackname = "Mud Shot", level = 55, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = " intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Nidoranfe"] = {attackname = "Bite", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Nidorina"] = {attackname = "Bite", level = 30, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Nidoqueen"] = {attackname = "Bite", level = 65, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Nidoranma"] = {attackname = "Bite", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Nidorino"] = {attackname = "Bite", level = 30, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Nidoking"] = {attackname = "Bite", level = 65, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Clefairy"] = {attackname = "Lovely Kiss", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 147, type = COMBAT_PHYSICALDAMAGE}, ["Clefable"] = {attackname = "Lovely Kiss", level = 45, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "intarget", effecta = 147, type = COMBAT_PHYSICALDAMAGE}, ["Vulpix"] = {attackname = "Iron Tail", level = 15, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 160, type = COMBAT_PHYSICALDAMAGE}, ["Ninetales"] = {attackname = "Iron Tail", level = 70, storage = 2000, cd = 2, atkmin = 230, atkmax = 270, range = 1, typeattack = "intarget", effecta = 160, type = COMBAT_PHYSICALDAMAGE}, ["Jigglypuff"] = {attackname = "Lovely Kiss", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 147, type = COMBAT_PHYSICALDAMAGE}, ["Wigglytuff"] = {attackname = "Lovely Kiss", level = 45, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "intarget", effecta = 147, type = COMBAT_PHYSICALDAMAGE}, ["Zubat"] = {attackname = "Bite", level = 15, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Golbat"] = {attackname = "Bite", level = 35, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Gloom"] = {attackname = "Acid", level = 25, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 20, type = COMBAT_PHYSICALDAMAGE}, ["Vileplume"] = {attackname = "Acid", level = 50, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 20, type = COMBAT_PHYSICALDAMAGE}, ["Paras"] = {attackname = "Poison Sting", level = 5, storage = 2000, cd = 2, atkmin = 70, atkmax = 90, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Parasect"] = {attackname = "Poison Sting", level = 50, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Venonat"] = {attackname = "Super Sonic", level = 5, storage = 2000, cd = 2, atkmin = 70, atkmax = 90, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Venomoth"] = {attackname = "Super Sonic", level = 50, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Diglett"] = {attackname = "Slash", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = " intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Dugtrio"] = {attackname = "Sand Attack", level = 35, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = " intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Meowth"] = {attackname = " Scratch", level = 15, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Persian"] = {attackname = "Scratch", level = 30, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 142, type = COMBAT_PHYSICALDAMAGE}, ["Psyduck"] = {attackname = "Aqua Tail", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Golduck"] = {attackname = "Water Gun", level = 55, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Mankey"] = {attackname = "Triple Kick", level = 15, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 110, type = COMBAT_PHYSICALDAMAGE}, ["Primeape"] = {attackname = "Triple Kick", level = 35, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 110, type = COMBAT_PHYSICALDAMAGE}, ["Growlithe"] = {attackname = "Bite", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Arcanine"] = {attackname = "Bite", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Poliwag"] = {attackname = "Bubbles", level = 5, storage = 2000, cd = 2, atkmin = 70, atkmax = 90, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Poliwhirl"] = {attackname = "Doubleslap", level = 25, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Poliwrath"] = {attackname = "Doubleslap", level = 65, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Kadabra"] = {attackname = " Confusion", level = 45, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "area", arr = arr1, effecta = 136, type = COMBAT_PHYSICALDAMAGE}, ["Alakazam"] = {attackname = " Confusion", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "area", arr = arr1, effecta = 136, type = COMBAT_PHYSICALDAMAGE}, ["Machop"] = {attackname = "Mega Punch", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 112, type = COMBAT_PHYSICALDAMAGE}, ["Machoke"] = {attackname = "Mega Punch", level = 47, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 112, type = COMBAT_PHYSICALDAMAGE}, ["Machamp"] = {attackname = "Mega Punch", level = 70, storage = 2000, cd = 2, atkmin = 230, atkmax = 270, range = 1, typeattack = "intarget", effecta = 112, type = COMBAT_PHYSICALDAMAGE}, ["Bellsprout"] = {attackname = "Vine Whip", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "direcion", effectdir0 = 80, effectdir1 = 83, effectdir2 = 81, effectdir3 = 82, type = COMBAT_PHYSICALDAMAGE}, ["Weepinbell"] = {attackname = "Vine Whip", level = 25, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "direcion", effectdir0 = 80, effectdir1 = 83, effectdir2 = 81, effectdir3 = 82, type = COMBAT_PHYSICALDAMAGE}, ["Victreebel"] = {attackname = "Vine Whip", level = 50, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "direcion", effectdir0 = 80, effectdir1 = 83, effectdir2 = 81, effectdir3 = 82, type = COMBAT_PHYSICALDAMAGE}, ["Tentacool"] = {attackname = "Bubbles", level = 15, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Tentacruel"] = {attackname = "Mud Shot", level = 75, storage = 2000, cd = 2, atkmin = 230, atkmax = 270, range = 1, typeattack = "intarget", effecta = 116, type = COMBAT_PHYSICALDAMAGE}, ["Geodude"] = {attackname = "Rock Throw", level = 15, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "area", arr = arr1, effecta = 44, type = COMBAT_PHYSICALDAMAGE}, ["Graveler"] = {attackname = "Rock Throw", level = 40, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "area", arr = arr1, effecta = 44, type = COMBAT_PHYSICALDAMAGE}, ["Golem"] = {attackname = "Rock Throw", level = 70, storage = 2000, cd = 2, atkmin = 230, atkmax = 270, range = 1, typeattack = "area", arr = arr1, effecta = 44, type = COMBAT_PHYSICALDAMAGE}, ["Ponyta"] = {attackname = "Quick Attack", level = 20, storage = 2000, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Rapidash"] = {attackname = "Quick Attack", level = 55, storage = 2000, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Slowpoke"] = {attackname = "Aqua Tail", level = 20, storage = 2000, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Slowbro"] = {attackname = "Aqua Tail", level = 45, storage = 2000, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Magnemite"] = {attackname = "Thunder Shock", level = 15, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "area", arr = arr1, effecta = 207, type = COMBAT_PHYSICALDAMAGE}, ["Magneton"] = {attackname = "Thunder Shock", level = 45, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "area", arr = arr1, effecta = 207, type = COMBAT_PHYSICALDAMAGE}, ["Farfetch'd"] = {attackname = "Drill Peck", level = 40, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Doduo"] = {attackname = "Quick Attack", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = " intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Dodrio"] = {attackname = "Quick Attack", level = 45, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = " intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Seel"] = {attackname = "Aqua Tail", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Dewgong"] = {attackname = "Headbutt", level = 45, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Grimer"] = {attackname = "Acid", level = 15, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 20, type = COMBAT_PHYSICALDAMAGE}, ["Muk"] = {attackname = "Acid", level = 35, storage = 2000, cd = 2, atkmin = 130, atkmax = 160, range = 1, typeattack = "intarget", effecta = 20, type = COMBAT_PHYSICALDAMAGE}, ["Shellder"] = {attackname = "Super Sonic", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Cloyster"] = {attackname = "Super Sonic", level = 60, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 22, type = COMBAT_PHYSICALDAMAGE}, ["Gastly"] = {attackname = "Shadow Ball", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 140, type = COMBAT_PHYSICALDAMAGE}, ["Haunter"] = {attackname = "Shadow Ball", level = 45, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 140, type = COMBAT_PHYSICALDAMAGE}, ["Gengar"] = {attackname = "Shadow Ball", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 140, type = COMBAT_PHYSICALDAMAGE}, ["Onix"] = {attackname = "Iron Tail", level = 50, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 160, type = COMBAT_PHYSICALDAMAGE}, ["Drowzee"] = {attackname = "Psybeam", level = 25, storage = 2000, cd = 2, atkmin = 30, atkmax = 60, range = 1, typeattack = " direcion", effectdir0 = 108, effectdir1 = 109, effectdir2 = 108, effectdir3 = 106, effectdir4 = 107, effectdir5 = 106, effectdir6 = 108, effectdir7 = 109, effectdir8 = 108, effectdir9 = 107, effectdir10 = 106, effectdir11 = 107, type = COMBAT_PHYSICALDAMAGE}, ["Hypno"] = {attackname = "Psybeam", level = 55, storage = 2000, cd = 2, atkmin = 90, atkmax = 140, range = 1, typeattack = " direcion", effectdir0 = 108, effectdir1 = 109, effectdir2 = 108, effectdir3 = 106, effectdir4 = 107, effectdir5 = 106, effectdir6 = 108, effectdir7 = 109, effectdir8 = 108, effectdir9 = 107, effectdir10 = 106, effectdir11 = 107, type = COMBAT_PHYSICALDAMAGE}, ["Krabby"] = {attackname = "Bubblebeam", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 25, type = COMBAT_PHYSICALDAMAGE}, ["Kingler"] = {attackname = "Bubblebeam", level = 40, storage = 2000, cd = 2, atkmin = 150, atkmax = 160, range = 1, typeattack = "intarget", effecta = 25, type = COMBAT_PHYSICALDAMAGE}, ["Voltorb"] = {attackname = "Spark", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 207, type = COMBAT_PHYSICALDAMAGE}, ["Electrode"] = {attackname = "Spark", level = 35, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "intarget", effecta = 207, type = COMBAT_PHYSICALDAMAGE}, ["Exeggcute"] = {attackname = "Confusion", level = 15, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "area", arr = arr1, effecta = 136, type = COMBAT_PHYSICALDAMAGE}, ["Exeggutor"] = {attackname = "Confusion", level = 55, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "area", arr = arr1, effecta = 136, type = COMBAT_PHYSICALDAMAGE}, ["Cubone"] = {attackname = "Bonemerang", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "area", arr = arr2, effecta = 212, type = COMBAT_PHYSICALDAMAGE}, ["Marowak"] = {attackname = "Bonemerang", level = 55, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "area", arr = arr2, effecta = 212, type = COMBAT_PHYSICALDAMAGE}, ["Hitmonlee"] = {attackname = "Mega Punch", level = 60, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 112, type = COMBAT_PHYSICALDAMAGE}, ["Hitmonchan"] = {attackname = "Mega Punch", level = 60, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 112, type = COMBAT_PHYSICALDAMAGE}, ["Lickitung"] = {attackname = "Headbutt", level = 55, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Koffing"] = {attackname = "Acid", level = 15, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 20, type = COMBAT_PHYSICALDAMAGE}, ["Weezing"] = {attackname = "Acid", level = 35, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "intarget", effecta = 20, type = COMBAT_PHYSICALDAMAGE}, ["Chansey"] = {attackname = "Great Love", level = 60, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "area", arr = arr1, effecta = 147, type = COMBAT_PHYSICALDAMAGE}, ["Tangela"] = {attackname = "Absorb", level = 50, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "direcion", effectdir0 = 80, effectdir1 = 83, effectdir2 = 81, effectdir3 = 82, type = COMBAT_PHYSICALDAMAGE}, ["Kangaskhan"] = {attackname = "Headbutt", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 118, type = COMBAT_PHYSICALDAMAGE}, ["Horsea"] = {attackname = "Bubbles", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Seadra"] = {attackname = "Bubbles", level = 45, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Goldeen"] = {attackname = "Poison Sting", level = 10, storage = 2000, cd = 2, atkmin = 90, atkmax = 100, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Seaking"] = {attackname = "Poison Sting", level = 45, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Staryu"] = {attackname = "Slash", level = 15, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = "intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Starmie"] = {attackname = "Slash", level = 35, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Mr.Mime"] = {attackname = "Psychic", level = 60, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 134, type = COMBAT_PHYSICALDAMAGE}, ["Scyther"] = {attackname = "Slash", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Jynx"] = {attackname = "Doubleslap", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 148, type = COMBAT_PHYSICALDAMAGE}, ["Electabuzz"] = {attackname = "Thunder Punch", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "area", arr = arr1, effecta = 48, type = COMBAT_PHYSICALDAMAGE}, ["Magmar"] = {attackname = "Fire Punch", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 5, type = COMBAT_PHYSICALDAMAGE}, ["Pinsir"] = {attackname = "Slash", level = 45, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 159, type = COMBAT_PHYSICALDAMAGE}, ["Tauros"] = {attackname = "Quick Attack", level = 45, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Gyarados"] = {attackname = "Bite", level = 85, storage = 2000, cd = 2, atkmin = 275, atkmax = 325, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Lapras"] = {attackname = "Ice Beam", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "area", arr = arr1, effecta = 147, type = COMBAT_PHYSICALDAMAGE}, ["Eevee"] = {attackname = "Quick Attack", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = " intarget", effecta = 111, type = COMBAT_PHYSICALDAMAGE}, ["Vaporeon"] = {attackname = "Bite", level = 55, storage = 2000, cd = 2, atkmin = 170, atkmax = 210, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Jolteon"] = {attackname = "Bite", level = 55, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Flareon"] = {attackname = "Bite", level = 55, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Porygon"] = {attackname = "Psybeam", level = 40, storage = 2000, cd = 2, atkmin = 150, atkmax = 170, range = 1, typeattack = "area", arr = arr1, effecta = 136, type = COMBAT_PHYSICALDAMAGE}, ["Omanyte"] = {attackname = " Rock Throw", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = " area", arr = arr1, effecta = 34, type = COMBAT_PHYSICALDAMAGE}, ["Omastar"] = {attackname = " Rock Throw", level = 80, storage = 2000, cd = 2, atkmin = 230, atkmax = 270, range = 1, typeattack = "area", arr = arr1, effecta = 34, type = COMBAT_PHYSICALDAMAGE}, ["Kabuto"] = {attackname = "Bubbles", level = 20, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Kabutops"] = {attackname = "Bubbles", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 68, type = COMBAT_PHYSICALDAMAGE}, ["Snorlax"] = {attackname = "Bite", level = 80, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 138, type = COMBAT_PHYSICALDAMAGE}, ["Dratini"] = {attackname = "Thunder Wave", level = 20, storage = 2000, cd = 2, atkmin = 100, atkmax = 130, range = 1, typeattack = " area", arr = arr1, effecta = 48, type = COMBAT_PHYSICALDAMAGE}, ["Dragonair"] = {attackname = "Aqua Tail", level = 60, storage = 2000, cd = 2, atkmin = 210, atkmax = 230, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Dragonite"] = {attackname = "Aqua Tail", level = 100, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 1, type = COMBAT_PHYSICALDAMAGE}, ["Rhydon"] = {attackname = "Horn Attack", level = 30, storage = 2000, cd = 2, atkmin = 130, atkmax = 150, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, ["Rhydon"] = {attackname = "Horn Attack", level = 75, storage = 2000, cd = 2, atkmin = 270, atkmax = 310, range = 1, typeattack = "intarget", effecta = 9, type = COMBAT_PHYSICALDAMAGE}, } function onSay(cid, words, param, target) if #getCreatureSummons(cid) == 0 then return doPlayerSendCancel(cid, "You do not have any pokemon.") end if getPlayerStorageValue(cid, 102032) == 1 then doPlayerSendCancel(cid, "Your pokemon is exhausted.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end for j,x in pairs(pokes) do local storage = x.storage local cd = math.ceil(x.cd/2) if getCreatureSummons(cid) ~= 0 then if not getTilePzInfo(getPlayerPosition(cid)) then if getCreatureName(getCreatureSummons(cid)[1]) == j then if getCreatureTarget(cid) ~= 0 then if not isSummon(getCreatureTarget(cid)) or not isPlayer(getCreatureTarget(cid)) then if getPlayerLevel(cid) >= x.level then if os.time()-getPlayerStorageValue(cid, storage) <= cd then minutes,seconds = getTime(cd-(os.time()-getPlayerStorageValue(cid, storage))) return doPlayerSendTextMessage(cid, 26, "You need to wait ".. seconds .. " seconds to use " ..x.attackname..".") end if x.typeattack == "distance" then if getDistanceBetween(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid))) <= x.range then doSendDistanceShoot(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid)), x.effectd) doSendMagicEffect(getCreaturePosition(getCreatureTarget(cid)), x.effecta) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) doCreatureSay(cid, ""..j..", "..x.attackname..".", 1) setPlayerStorageValue(cid, storage, os.time()+cd) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) if x.poison == true then Poison(cid) end else doPlayerSendCancel(cid, "Target is far away.") doSendMagicEffect(getCreaturePosition(cid), 2) end return true end if x.typeattack == "area" then if getDistanceBetween(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid))) <= x.range then doSendMagicEffectInArea(getCreaturePosition(getCreatureSummons(cid)[1]),x.effecta,x.arr) if x.poison == "yes" then Poison(cid) end doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) doCreatureSay(cid,""..j..", "..x.attackname..".", 1) setPlayerStorageValue(cid, storage, os.time()+cd) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) else doPlayerSendCancel(cid, "Target is far away.") doSendMagicEffect(getCreaturePosition(cid), 2) end return true end if x.typeattack == "direcion" then if getDistanceBetween(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid))) <= x.range then if x.poison == true then Poison(cid) end if getCreatureLookDir(getCreatureSummons(cid)[1]) == 0 then doSendMagicEffect(getPositionByDirection(getCreaturePosition(getCreatureSummons(cid)[1]), 0, 1),x.effectdir0) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) setPlayerStorageValue(cid, storage, os.time()+cd) doCreatureSay(cid,""..j..", "..x.attackname..".", 1) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) elseif getCreatureLookDir(getCreatureSummons(cid)[1]) == 1 then doSendMagicEffect(getPositionByDirection(getCreaturePosition(getCreatureSummons(cid)[1]), 1, 1),x.effectdir1) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) setPlayerStorageValue(cid, storage, os.time()+cd) doCreatureSay(cid,""..j..", "..x.attackname..".", 1) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) elseif getCreatureLookDir(getCreatureSummons(cid)[1]) == 2 then doSendMagicEffect(getPositionByDirection(getCreaturePosition(getCreatureSummons(cid)[1]), 2, 1),x.effectdir2) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) setPlayerStorageValue(cid, storage, os.time()+cd) doCreatureSay(cid,""..j..", "..x.attackname..".", 1) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) elseif getCreatureLookDir(getCreatureSummons(cid)[1]) == 3 then doSendMagicEffect(getPositionByDirection(getCreaturePosition(getCreatureSummons(cid)[1]), 3, 1),x.effectdir3) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) setPlayerStorageValue(cid, storage, os.time()+cd) doCreatureSay(cid,""..j..", "..x.attackname..".", 1) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) end else doPlayerSendCancel(cid, "Target is far away.") doSendMagicEffect(getCreaturePosition(cid), 2) end return true end if x.typeattack == "intarget" then if getDistanceBetween(getCreaturePosition(getCreatureSummons(cid)[1]), getCreaturePosition(getCreatureTarget(cid))) <= x.range then if x.poison == true then Poison(cid) end doSendMagicEffect(getCreaturePosition(getCreatureTarget(cid)), x.effecta) doAreaCombatHealth(getCreatureSummons(cid)[1], x.type, getCreaturePosition(getCreatureTarget(cid)), x.arr, -(x.atkmin+getPlayerLevel(cid)), -(x.atkmax+getPlayerLevel(cid)), x.effecta) doCreatureSay(cid, ""..j..", "..x.attackname..".", 1) setPlayerStorageValue(cid, storage, os.time()+cd) setPlayerStorageValue(cid, 102032, 1) addEvent(setPlayerStorageValue, 1*1000, cid, 102032, -1) else doPlayerSendCancel(cid, "Target is far away.") doSendMagicEffect(getCreaturePosition(cid), 2) end return true end else doPlayerSendTextMessage(cid, 27, "You need level "..x.level.." to use " ..x.attackname..".") doSendMagicEffect(getCreaturePosition(cid), 2) return true end else doPlayerSendCancel(cid, "Invalid Target.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end else doPlayerSendCancel(cid, "Target not is avalied.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end end else doPlayerSendCancel(cid, "Do not Attack in Protection Zone.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end else doPlayerSendCancel(cid, "You need pokemon to use attacks.") doSendMagicEffect(getCreaturePosition(cid), 2) return true end end return true end Ainda nao consegui editar as magias em area pois o script é um pouco complicado mas to tentando, quando conseguir eu posto aqui. O tutorial de edição esta nesse topico:[Talkaction]System M1 Pronto pessoal, é uma ajudinha pra vocês ai, devidos creditos a:XotservX por ter liberado o script, Mock , pela função doSendMagicEffectInArea MatheusMkalo pela função getTime(s).Dá um REP + AI PESSoAL!! MEU PRIMEIRO TOPICO Até mais.1 ponto -
Lonely [Sign]
lukfafa reagiu a Maluko Aprendiz por um tópico no fórum
Fala gente... Estava navegando pela internet , achei uma stock de uma mina sentada... A stock tava meio sem qualidade, botei contraste e focos de brilho e uma tipo... Achei que ficou bom vou postar aqui: Lonely Sign (Tem bordas Brancas do Lado da Azul e Vermelha.)1 ponto -
Templo (Rook / Main)
rafafinhaa reagiu a Vitinhowcq por um tópico no fórum
Script: 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) end function onThink() npcHandler:onThink() end function oracle(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end local cityNode = node:getParent():getParent() local vocNode = node:getParent() local destination = cityNode:getParameters().destination local town = cityNode:getParameters().town local vocation = vocNode:getParameters().vocation if(destination ~= nil and vocation ~= nil and town ~= nil) then if(getPlayerLevel(cid) < parameters.level) then npcHandler:say('You must first reach level ' .. parameters.level .. '!', cid) else if getPlayerVocation(cid) > 0 then npcHandler:say('Sorry, You already have a vocation!') else doPlayerSetVocation(cid, vocation) doPlayerSetTown(cid, town) doTeleportThing(cid, destination) doSendMagicEffect(destination, CONST_ME_MAGIC_BLUE) end end end npcHandler:resetNpc() return true end function greetCallback(cid) if(getPlayerLevel(cid) < 8) then npcHandler:say('COME BACK WHEN YOU GROW UP, CHILD!') return false else return true end end npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setMessage(MESSAGE_GREET, 'Hello |PLAYERNAME|. Are you prepared to face your destiny?') local yesNode = KeywordNode:new({'yes'}, oracle, {level = 8}) local noNode = KeywordNode:new({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then what vocation do you want to become?'}) local node1 = keywordHandler:addKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'What city do you wish to live in Main? say {yes}'}) local node2 = node1:addChildKeyword({'Yasha'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, town = 2, destination = {x=996, y=1031, z=5}, text = 'Yasha, eh? So what vocation do you wish to become? {Sorcerer}, {druid}, {paladin} or {knight}?'}) local node3 = node2:addChildKeyword({'sorcerer'}, StdModule.say, {npcHandler = npcHandler, vocation = 1, onlyFocus = true, text = 'So, you wish to be a powerful magician? Are you sure about that? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node3 = node2:addChildKeyword({'druid'}, StdModule.say, {npcHandler = npcHandler, vocation = 2, onlyFocus = true, text = 'Are you sure that a druid is what you wish to become? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node3 = node2:addChildKeyword({'paladin'}, StdModule.say, {npcHandler = npcHandler, vocation = 3, onlyFocus = true, text = 'A ranged marksman. Are you sure? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node3 = node2:addChildKeyword({'knight'}, StdModule.say, {npcHandler = npcHandler, vocation = 4, onlyFocus = true, text = 'A mighty warrior. Is that your final decision? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node2 = node1:addChildKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, town = 2, destination = {x=996, y=1031, z=5}, text = 'Yasha, eh? So what vocation do you wish to become? {Sorcerer}, {druid}, {paladin} or {knight}?'}) local node3 = node2:addChildKeyword({'sorcerer'}, StdModule.say, {npcHandler = npcHandler, vocation = 1, onlyFocus = true, text = 'So, you wish to be a powerful magician? Are you sure about that? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node3 = node2:addChildKeyword({'druid'}, StdModule.say, {npcHandler = npcHandler, vocation = 2, onlyFocus = true, text = 'Are you sure that a druid is what you wish to become? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node3 = node2:addChildKeyword({'paladin'}, StdModule.say, {npcHandler = npcHandler, vocation = 3, onlyFocus = true, text = 'A ranged marksman. Are you sure? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node3 = node2:addChildKeyword({'knight'}, StdModule.say, {npcHandler = npcHandler, vocation = 4, onlyFocus = true, text = 'A mighty warrior. Is that your final decision? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node2 = node1:addChildKeyword({'Yasha2'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, town = 2, destination = {x=996, y=1031, z=5}, text = 'Yasha, eh? So what vocation do you wish to become? {Sorcerer}, {druid}, {paladin} or {knight}?'}) local node3 = node2:addChildKeyword({'sorcerer'}, StdModule.say, {npcHandler = npcHandler, vocation = 1, onlyFocus = true, text = 'So, you wish to be a powerful magician? Are you sure about that? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node3 = node2:addChildKeyword({'druid'}, StdModule.say, {npcHandler = npcHandler, vocation = 2, onlyFocus = true, text = 'Are you sure that a druid is what you wish to become? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node3 = node2:addChildKeyword({'paladin'}, StdModule.say, {npcHandler = npcHandler, vocation = 3, onlyFocus = true, text = 'A ranged marksman. Are you sure? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) local node3 = node2:addChildKeyword({'knight'}, StdModule.say, {npcHandler = npcHandler, vocation = 4, onlyFocus = true, text = 'A mighty warrior. Is that your final decision? This decision is irreversible!'}) node3:addChildKeywordNode(yesNode) node3:addChildKeywordNode(noNode) keywordHandler:addKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Then come back when you are ready.'}) npcHandler:addModule(FocusModule:new())1 ponto -
[Pedido] Avatar, Sign E Fanbar
Karislayer reagiu a Maluko Aprendiz por uma questão
Eae Diego, beleza? Eu vi seu pedido já falei com vc no Msn o por que não fiz com a Stock que vc mandou mais fiz algo relacionado à mulheres espero que goste! Avatar: Sign: FanBar:1 ponto -
[Config/distro] Black Skull Não Funciona
zani123 reagiu a Vitinhowcq por um tópico no fórum
ja tento troca de distro1 ponto -
Produzindo Um Texto...
lovetm reagiu a Maluko Aprendiz por um tópico no fórum
@caverna se Signs não tem nada haver com Design por que são postadas em #Design e Gráficos...1 ponto -
function onSay(cid, words, param) local itemid = 9971 local param = items[param] local items = { ["axe"] = {cash = 150, id = 8926, amount = 1}, ["sword"] = {cash = 150, id = 7403, amount = 1}, ["club"] = {cash = 150, id = 7423, amount = 1}, ["staff"] = {cash = 150, id = 8922, amount = 1}, ["book"] = {cash = 150, id = 8921, amount = 1}, ["axe dois"] = {cash = 80, id = 7453, amount = 1}, ["sword dois"] = {cash = 80, id = 7418, amount = 1}, ["club dois"] = {cash = 80, id = 7392, amount =1}, ["staff dois"] = {cash = 80, id = 6534, amount =1}, ["book dois"] = {cash = 80, id = 8904, amount = 1}, ["crossbow dois"] = {cash = 150, id = 8851, amount = 1}, ["crossbow"] = {cash = 80, id = 8853, amount = 1} } if (param ~= nil) then if getPlayerItemCount(cid, itemid) >= param.cash then doPlayerAddItem(cid, param.id, param.amount) doPlayerRemoveItem(cid, itemid, param.cash) else doPlayerSendCancel(cid,"Desculpe, você não tem o dinheiro suficiente.") end else doPlayerSendCancel(cid, "Item não encontrado.") end return true end1 ponto
-
Great Mana Potion
w3ndel reagiu a Vitinhowcq por um tópico no fórum
Não tem como ela healar 600 se o script ta healando de 230-290 de mana. - Se você acha isso mesmo, de uma olhada mais em seus scripts para ver se existe outro script de great mana potion que está healando 600 de mana. - Se você não percebeu você pode está contando com a recuperação de pontos de mana nos vocations.xml. DE UMA FUNFADA1 ponto -
Player Vip Ganhando 30% Mais Exp Do Que Player Free
BlueDragon reagiu a guixap por um tópico no fórum
Esse tutorial do VODKART pode lhe ajudar. Double Exp Vip - Vodkart1 ponto -
[Funciona] Abrindo Mapa De Pokemon
Jobsonmb reagiu a luisstronda por um tópico no fórum
dinadaa caara , se colocarem fixo melhor ainda vlw1 ponto -
Os comandos de staff estão em data/XML/commands.xml No Mystic Spirit algumas coisas são diferentes do Crying Damson @maper1 As funções do Crying Damson são um pouco diferentes e até mais variadas, algumas não funcionam no Mystic Spirit. Tenta achar um Mystic Spirit 8.60 com as talkactions que você quer, daí as funções serão compatíveis.1 ponto
-
Npc Libera Porta Pro Certo Item
victormoaz reagiu a Demonbholder por um tópico no fórum
Oi, bom, se você tem o minimo de bom senso, você já colocou uma action na tal porta, para que só players com um certo storage possam passar. Se já tiver feito isso, segue o script do npc: Azul: Id do item necessário para setar o storage. Vermelho: Storage necessário para abrir a porta. Não testei, aguardo resposta.1 ponto -
Feito POr Luuh Magias Super ROX :construction: spells.rar Download Magias Super RoX Para Seu Servidor By Luuh Edite Elas E Acrescente Ao Seu Servidor Gosto Custa Um REP+? Vlw Abraços Galera Do XtibiA.com Ainda Não Sei Fazer Scan Se Alguem Puder Me Ajudar Vlw Mesmo Aew"!1 ponto
-
Bom essa duvida eu tbm tinha mas acho que o @felipitovis esta certo.1 ponto
-
Go/back Com Pokelevel System
godjean21 reagiu a vitorszvitim por um tópico no fórum
SALVE GALERA XTIBIANA AKI EU DENOVO COM MAIS UM TUTORIAL Primeiro os créditos 50% MatheusMkalo (go/back System) 50% vitorszvitim (pokelevel System) Vamos lá! Primeiro vá em PastadoServer/Data/Actions/Script, copie um arquivo qualquer e renomeie-o com o nome goback.lua, abra-o com o Bloco de Notas e apague tudos o que estiver escrito, depois digite: Salve e Fexe Agora vá em PastadoServer/Data/Actions, abra o arquivo Actions.xml e em qualque lugar digite: Salve e Fexe Bom Não Esplicarei as Tags Pois o Sistema é Semelhante ao Go/back (MatheusMkalo), a única diferença é o PokeLevel System facil de Entender Caso Eu Tenha Esquicido Algum Crédito Me Aviza Ae ! ! ! Ajudei? REP+ não custa nada :button_ok:1 ponto -
Edite Suas Magias E Runas! Retirado
alebruaccgc reagiu a miguel223 por um tópico no fórum
Tópico fechado. Porque? Não uso mais Xtibia, não confiam em mim.1 ponto -
o Map ainda ta evolutions ?1 ponto
-
Venho trazer á vcs 76 spells, editada por min , baseada em outras spells, todas spells estão com falas (pokemon fala nome da spell). Screenshot's #Download : Megaupload 4Shared #Scan : Aki Para não Causar Bugs use essas seguintes Tags : <instant name="Shadow Ball" words="shadow attack" lvl="999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/shadowball.lua"> </instant> <instant name="Egg Bomb" words="egg attack" lvl="999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/eggbomb.lua"> </instant> <instant name="Lick" words="lick attack" lvl="999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/lick.lua"> </instant> <instant name="Shadow Punch" words="shadowpunch attack" lvl="999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/shadowpunch.lua"> </instant> <instant name="Dream Eater" words="dream attack" lvl="999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/dreameater.lua"> </instant> <instant name="Leech Seed" words="leech" lvl="10" mana="10" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/leech.lua"> </instant> <instant name="Supersonic" words="sonic attack" lvl="10" mana="10" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/supersonic.lua"> </instant> <instant name="Poisonpowder" words="powder attack" lvl="10" mana="10" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/poisonpowder.lua"> </instant> <instant name="Sludge Bomb" words="sludge attack" lvl="10" mana="10" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/sludgebomb.lua"> </instant> <instant name="Fire Spin" words="spin attack" lvl="10" mana="10" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/firespin.lua"> </instant> <instant name="Pin Missile" words="pin attack" lvl="10" mana="10" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/pinmissile.lua"> </instant> <instant name="Tackle" words="tackle attack" lvl="10" mana="10" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/tackle.lua"> </instant> <instant name="Double Kick" words="kick attack" lvl="10" mana="10" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/doublekick.lua"> </instant> <instant name="Dynamicpunch" words="dynamicpunch attack" lvl="10" mana="10" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/dynamicpunch.lua"> </instant> <instant name="Scratch" words="Scratch attack" lvl="10" mana="10" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/scratch.lua"> </instant> <instant name="Rage" words="rage attack" lvl="10" mana="10" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/rage.lua"> </instant> <instant name="Thundershock" words="shock attack" lvl="10" mana="10" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/thundershock.lua"> </instant> <instant name="Icy Wind" words="icy attack" lvl="999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/icywind.lua"> </instant> <instant name="Dragon Rage" words="dragon attack" lvl="9999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/dragonrage.lua"> </instant> <instant name="Ember" words="ember attack" lvl="9999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/ember.lua"> </instant> <instant name="String Shot" words="string attack" lvl="9999" mana="20" prem="1" range="4" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/stringshot.lua"> </instant> <instant name="Swift" words="swift attack" lvl="9999" mana="20" prem="1" range="4" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/swift.lua"> </instant> <instant name="Horn Attack" words="chifre attack" lvl="9999" mana="20" prem="1" range="4" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/hornattack.lua"> </instant> <instant name="Poison Sting" words="sting attack" lvl="9999" mana="20" prem="1" range="4" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/poisonsting.lua"> </instant> <instant name="Gust" words="gust attack" lvl="999" mana="100" selftarget="1" prem="1" exhaustion="2000" needlearn="0" event="script" value="poke/gust.lua"> </instant> <instant name="Earthquake" words="earthquake attack" lvl="9999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/earthquake.lua"> </instant> <instant name="Karate Chop" words="karate attack" lvl="9999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/karatechop.lua"> </instant> <instant name="Thrash" words="thrash attack" lvl="9999" mana="20000" prem="1" range="1" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/thrash.lua"> </instant> <instant name="Teleport" words="teleport attack" lvl="100" mana="800" needtarget="1" prem="0" range="5" exhaustion="2000" blockwalls="1" needlearn="0" script="poke/teleport.lua"> </instant> <instant name="Cross Chop" words="cross attack" lvl="9999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/crosschop.lua"> </instant> <instant name="Tri Attack" words="tres attack" lvl="9999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/triattack.lua"> </instant> <instant name="Tail Whip" words="tail attack" lvl="9999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/tail.lua"> </instant> <instant name="Sonicboom" words="sonicb attack" lvl="9999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/sonicboom.lua"> </instant> <instant name="Bite" words="bite attack" lvl="999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/bite.lua"> </instant> <instant name="Peck" words="peck attack" lvl="999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/peck.lua"> </instant> <instant name="Splash" words="splash attack" lvl="999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/splash.lua"> </instant> <instant name="Hyper Fang" words="fang attack" lvl="999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/hyperfang.lua"> </instant> <instant name="Drill Peck" words="drill attack" lvl="999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/drillpeck.lua"> </instant> <instant name="Mirror Move" words="mirror attack" lvl="9999" mana="20000" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/mirrormove.lua"> </instant> <instant name="Waterfall" words="waterfall attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/waterfall.lua"> </instant> <instant name="Night Shade" words="nightshade attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/nightshade.lua"> </instant> <instant name="Ice Shard" words="shard attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/iceshard.lua"> </instant> <instant name="Stun Spore" words="stun attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/stunspore.lua"> </instant> <instant name="Sand Tomb" words="tomb attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/sandtomb.lua"> </instant> <instant name="Wing Attack" words="asa attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/wingattack.lua"> </instant> <instant name="Whirlwind" words="whirlwind attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/whirlwind.lua"> </instant> <instant name="Smokescreen" words="smoke attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/smokescreen.lua"> </instant> <instant name="Thunder" words="thunder attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/thunder.lua"> </instant> <instant name="Solarbeam" words="solar attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/solar.lua"> </instant> <instant name="Flamethrower" words="flamethrower attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/flamethrower.lua"> </instant> <instant name="Hyper Beam" words="hyper attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/hyperbeam.lua"> </instant> <instant name="Quick Attack" words="rapido attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/quickattack.lua"> </instant> <instant name="Ice Beam" words="icebeam attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/icebeam.lua"> </instant> <instant name="Acid" words="acid attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/acid.lua"> </instant> <instant name="Confuse Ray" words="ray attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/confuseray.lua"> </instant> <instant name="Hydro Pump" words="hydro attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/hydropump.lua"> </instant> <instant name="Rain Dance" words="rain attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/raindance.lua"> </instant> <instant name="Future Sight" words="future attack" lvl="999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/futuresight.lua"> </instant> <instant name="Psybeam" words="psybeam attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/psybeam.lua"> </instant> <instant name="Psychic" words="psychic attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/psychic.lua"> </instant> <instant name="Confusion" words="confusion attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/confusion.lua"> </instant> <instant name="Bone Rush" words="rush attack" lvl="9999" mana="160" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="poke/bonerush.lua"> </instant> <instant name="Bubble" words="bubble attack" lvl="9999" mana="20" prem="1" range="4" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/bubble.lua"> </instant> <instant name="Fury Attack" words="furia attack" lvl="9999" mana="20" prem="1" range="4" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/furyattack.lua"> </instant> <instant name="Razor Leaf" words="razor" lvl="9999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/razor.lua"> </instant> <instant name="Petal Dance" words="petal attack" lvl="9999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/petaldance.lua"> </instant> <instant name="Bone Club" words="bone attack" lvl="9999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/boneclub.lua"> </instant> <instant name="Rock Polish" words="polish attack" lvl="9999" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="poke/rockpolish.lua"> </instant> <instant name="Berserk" words="exori1" lvl="3005" mana="115" prem="1" needweapon="1" exhaustion="2000" needlearn="0" event="script" value="poke/berserk.lua"> </instant> <instant name="Stone Edge" words="edge attack" lvl="3005" mana="115" prem="1" needweapon="1" exhaustion="2000" needlearn="0" event="script" value="poke/stoneedge.lua"> </instant> <instant name="Thunderbolt" words="bolt attack" lvl="3005" mana="115" prem="1" needweapon="1" exhaustion="2000" needlearn="0" event="script" value="poke/thunderbolt.lua"> </instant> <instant name="Sandstorm" words="sandstorm attack" lvl="3005" mana="115" prem="1" needweapon="1" exhaustion="2000" needlearn="0" event="script" value="poke/sandstorm.lua"> </instant> <instant name="Vine Whip" words="vine attack" lvl="3800" mana="210" direction="1" exhaustion="2000" needlearn="0" event="script" value="poke/vinewhip.lua"> </instant> -- Adicionando a Spell no pokemon -- Abra o xml do pokemon e depois de Attacks adc : <attack name="Confusion" interval="4000" chance="100" min="-352" max="-535"> </attack> Vermelho : Nome da Spell configurada na Tag Laranja : Tempo que demorara para usar a spell 1000 = 1s Verde : Chance do attack funcionar Roxo : Dano que a Spell Causará Se a Spell for de distancia adc : range="5" target="1" range : distancia para usar a spell target : se precisa target. -- Não Esqueça REP+1 ponto
-
--não é meu-- da door: em actions/scripts actions.xml da vip: em talkactions/scripts em talkactions.xml peguei de outro.1 ponto
-
Tibiang 8.70 Full Crack
Henrique Moura reagiu a vicklove por um tópico no fórum
Bom Galera ai está o download do crack do NG pra versão 8.70 do Tibia Totalmente livre de virus! Crack Full, potions, cave hunt, e sem problemas com o loot!!! Espero que gostem, e aproveitem um abraço a todos !! Download do arquivo: Tibia Bot Ng Crack 8.70.rar-1 pontos -
Programação.lua ( Super Teórico, Muita Leitura )
DaNDaNrOxX reagiu a vitorbittencourt por um tópico no fórum
Cara, muito interessante. Não lí tudo mais, vc merece um REP + :star2:-1 pontos