Ir para conteúdo

Tutoriais sobre Scripting

Aprenda com os mestres da comunidade a desenvolver seus scripts, sistemas e domine a linguagem .lua!

Atenção!

- Esta área é para publicação de Tutoriais sobre criação de códigos Otserv.

- Ao ler um tutorial, dê reputação ao membro que o publicou e comente no tópico. Este pequeno incentivo faz com que membros continuem trazendo tutoriais e outros conteúdos ao fórum.

- Se o conteúdo não for seu, adicione Créditos!

- Por motivos de segurança é necessário que um membro da equipe Aprove o seu Tópico, dessa forma mantemos o fórum organizado e livre de conteúdos maliciosos, obrigado pela compreensão!

 

Procure pelo tipo de código:

 

  1. Started by Slaake,

    Lua Orientada a Objetos Avançado ! Lua é uma linguagem de programação(Sério??) , sua orientação a tabelas, meta tabelas, meta métodos é bem prático eversátil. * Meta tabelas * O que é uma meta tabelas? São tabelas que controla o comportamento de outras estruturas de dados, ela nos permiti alterar o comportamento da tabela. Exemplo, se colocar o código abaixo num interpretador Lua. nome = "Tibia King, forum de todos" print(nome:upper()) A saída será: Tibia King, forum de todos Porém, da onde saiu esse upper()? Vejamos. print(getmetatable(nome)) Sua saída será: table: 0033BE78 Uma meta tabela associado…

    • 2 respostas
    • 1.9k visualizações
  2. Started by MaXwEllDeN,

    << Aula 5 - Variáveis e Comentários Escopo Aula 6 Vimos na aula anterior sobre variáveis, e vimos também, bem superficialmente, como declarar variáveis como locais. Você pode se perguntar: "Qual a utilidade de uma variável local?", "O que ela tem de diferente de uma variável global?" ou "Se elas são tão importantes, por que quase ninguém usa?". Vamos por passos. Imagine a seguinte situação: "Você tem uma variável chamada var, e ela vale 1, mas em certo ponto do script você quer que ela receba o valor 2, execute alguma coisa (Como um print) e, depois que executar, ela retorne ao valor anterior (1).". Um dos modos de fazer isto é usand…

    • 2 respostas
    • 2.7k visualizações
  3. Started by thiagobji,

    Como o título já diz tudo, vou ensinar umas partes para os iniciantes hoster de OTServer que sabe pouco ainda Vou fazer só 1 mesmo para entenderem mesmo (Estou pegando o outfits do Global Compacto, rsrs) O Outfit sem está editado <outfit id="1"> <list gender="0" lookType="136" name="Citizen"/> <list gender="1" lookType="128" name="Citizen"/> </outfit> Agora editando, passo a passo <outfit id="1"> - Eu peguei o primeiro addon, então será o número 1 <list gender="0" - Todo mundo sabe que GENDER é SEXO (SÉRIO? ¬¬), o número 0 é o sexo masculino e o número 1 é o sexo feminino. lookType="136" - o n…

    • 2 respostas
    • 1.2k visualizações
  4. Started by Ryzor,

    Automatização e Simplificação de Scripts Bem, este é minha segunda "aula", a primeira foi sobre o comando addEvent, esta é um pouco mais complexa, vou demonstrar algumas possibilidades de automatização e simplificação de scripts, algo muito importante pra tornar um script mais simples e prático. Vamos a algumas definições: Automação: é um sistema automático de controle pelo qual os mecanismos verificam seu próprio funcionamento, efetuando medições e introduzindo correções, sem a necessidade da interferência do homem. Simplificar: tornar menos complicado (fiquei com preguiça de procurar mais). Situação 1: Fazendo um cardápio Temos um talkact…

    • 2 respostas
    • 729 visualizações
  5. Started by Skyligh,

    Olá galera do tibiaking, hoje estou trazendo um tutorial para vocês que querem entender a linguagem.lua Entendendo A Linguagem.lua Então vamos aprender a linguagem . Abaixo irei amostrar todos os significado do ((if , end , else , elseif , then , and)) traduzido para o português if - Se then - Então end - Fim else - senão elseif - senãose and - e Functions Iniciais De Um Script Agora irei ensina-los qual e as functions certas para iniciar um script function onUse(cid, item, frompos, item2, topos) -- Action function onLogin(cid) -- so se for usa alguma tag no login.lua utilize essa function ela serve para creaturescripts. fu…

    • 2 respostas
    • 1.9k visualizações
  6. Started by xFatality,

    Lua é uma linguagem de programação poderosa e leve, projetada para estender aplicações. Lua também é frequentemente usada como uma linguagem de propósito geral. Lua é software livre de código aberto. 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, 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. Um conceito fundamental…

    • 2 respostas
    • 527 visualizações
  7. Started by xFatality,

    Tutorial de NPCS Esse tutorial irá servir para quem gostar de fazer certo NPCs mais complexos com storages, varias missões e tudo mais. Usando como base o Jiddo system apenas para comprar e vender itens, pois não gosto de usar sistemas que facilitam Pois não criam scripters e sim preguiçosos, ainda mais quando o sistema é abandonado ai você se lasca O npc é dividido em duas partes : - Arquivo XML : Responsavel pelo visual e algumas propriedades dele (pelo jiddo system) - Arquivo Lua : Responvasel pelas falas e vendas (Lua puro) Visual do Npc Bem primeiro vamos explicar o visual de um npc, <npc name="Bonifacius" script="data…

    • 2 respostas
    • 5.4k visualizações
  8. Started by Ryzor,

    Faaaaala galerinha! A pedido de alguns usúarios estou aqui para postar este tutorial. Espero que seja útil para todos que tem alguma dúvida quanto ao Stackpos. Eu sinceramente não domino completamente a magia dos stackpos, mas espero poder tirar algumas dúvidas de quem sabe e ensinar quem ainda não sabe. Vamos logo ao tutorial: Stackpos • Introdução Stackpos é um dos index da tabela que guarda posições. Toda posição é uma tabela, exemplo: {x=160, y=50, z=7}, mas o que pouca gente sabe, é que o stackpos também faz parte desta tabela. Todos sabem que em uma unica posição podem haver vários itens, formando uma pilha de itens, portanto, para difere…

  9. Started by MaXwEllDeN,

    << Aula 8 - while & repeat Essa aula foi escrita por um suricato Notorious, todos os créditos pertencem à ele. Tabelas Aula 9 #Introdução Olá, nessa aula vamos conhecer um elemento que facilita muito a vida de programadores, principalmente quando se trata de um código com muitas variáveis e operações, as tabelas! Imagine uma tabela como se fosse uma estante com várias gavetas, quantas você desejar, dentro de cada gaveta tem um objeto, temos a gaveta um, a gaveta dois, e assim em diante ... podemos guardar objetos dentro de cada gaveta, tirar objetos delas e também saber o que tem dentro de cada uma, nessa analogia uma…

    • 2 respostas
    • 3.3k visualizações
  10. ja vi varias pessoas com problema na Arena Quest principalmente em ots 9.6 ( Quando voce mata o Boss e mesmo assim nao passa pelo portal pra proxima room) vou mostrar como e simples arrumar o problema basta fazer o seguinte vá na pasta creaturescripts do seu ot e crie um arquivo com o nome arenakill.lua caso ja tenha basta abrir e subistituir o script, logo em seguida adicione o script: e salve o arquivo e feche. depois abra o arquivo creaturescripts.xml e adicione a linha: caso ja tenha nao precisa adicionar, depois de feito esse procedimento ligue o ot e faça a quest que estará funcionando 100% atenção so irá funciona caso vc nao esteja conseguindo passa…

    • 2 respostas
    • 1.1k visualizações
  11. Started by Orochi Elf,

    Olá galera, eu estava sem nada pra fazer e fui brincar com o "SciTe", e fazendo meus codigos, precisei de uma forma de contar recrescivamente um numero, então eu fiquei com preguissa de fazer aquele codigo SUPER GRANDE, e resolvi testar alguns codigos simples. e acabei descobrindo o FOR para contagem de subtraçoes. Meu Codigo : local a = 60 for b = 1,60 do c = a - 1*b print(c) end Resultado : 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Es…

    • 2 respostas
    • 556 visualizações
  12. Started by MaXwEllDeN,

    Criado por: Kaotar Testado e Baseado em: TFS 0.4_DEV Informações adicionais: Todo mundo já se deparou, quando foi modificar a sua spell, com a formula e não entendeu o que cada numero significava, irei explicar tudo o que necessitas nesse tópico. Hail, bom como já leram nas informações adicionais acima, estou aqui para explicar o que cada numero, na formulas de combat, significam. Formula: setCombatFormula(combat, type, mina, minb, maxa, maxb[, minl, maxl[, minm, maxm[, minc[, maxc]]]]) Como podem ver são varios os argumentos que passamos para essa função: para facilitar a explicação vou chama-los de forma diferente. Notem as cores, você pode escol…

    • 2 respostas
    • 2.5k visualizações
  13. Started by joaotmed,

    Bom, vi que algumas pessoas estão com problemas com coisas muito simples em scripting, então resolvi fazer esse tutorial ensinando o básico. Criando um novo monstro Vá em otserv/data/monster e escolha com qual monstro vc quer que o seu novo pareça ex. demon. Copie o aqruivo do monstro e renomeie para o nome do seu monstro e em seguida abra-o. aparecerá mais ou menos isso: <?xml version="1.0" encoding="UTF-8"?> <monster name="Demon" nameDescription="a demon" race="fire" experience="6000" speed="280" manacost="0"> <health now="8200" max="8200"/> <look type="35" corpse="5995"/> <targetchange interval="5000" chan…

    • 2 respostas
    • 1.9k visualizações
  14. Galera acabei de criar um script que baixa e compila o OTserv no Linux, lembrando que está versão é apenas para a distribuição Debian/Ubuntu e suas derivadas... lembrando que eu irei atualizar o código daqui pra frente, então fiquem ligados no GitHub, para onbter o script mais recente... O script é apenas para os preguiçosos de plantão (Assim como eu), ele irá baixar e compilar o otserv automaticamente. O script apenas faz isso, ele não faz mágica, mas é uma boa Fique de olho no projeto oficial. Primeiro baixe os dois arquivos necessários para a compilação: Baixe Aqui Jogue os arquivos na pasta Home, sua pasta deverá ficar assim: Abra o termina…

    • 2 respostas
    • 1.2k visualizações
  15. Bom dia! Trago estas três funções .lua que utiliza o player ID da database para retornar o Nome, vice-versa e o próprio ID Não consigo lhes dar exemplos de utilização, entretanto eu as utilizo. Estou certo que pode servir para alguém. • getPlayerNameById(id) • getPlayerIdByName(name) • getPlayerID(cid) Créditos a mim mesmo. Abraço!

  16. Started by tioj,

    Bom galera eu estava tentando arrumar a dex do pda porque quando você tenta adicionar novos pokes de outras gerações eles simplesmente não apareciam na dex ou no comando /dex, bom com essas gambiarras modificações que eu fiz está dando certo e não vejo nenhum erro (até agora). bom vamos as scripts: data>actions>scripts>pokedex.lua substitua todo o arquivo por esse: agora vá em data>creaturescripts>scripts>newpokedex.lua e substitua tudu por esse: function onSay(cid, words, param, channel) if param == "" then doPlayerSendCancel(cid, "Por Favor, digite /dex <name of pokemon> para ver se possui ele em sua d…

    • 2 respostas
    • 2.5k visualizações
  17. Started by L3K0T,

    Bom pessoal eu estava sofrendo com um erro, que dava shutdown em meu server, ele não reiniciava, ficava só no shutdown o dia todo, então eu resolvi verificar esse código game.cpp, resolvi meu problema e venho compartilhar com vocês. Vá em game.cpp procure void Game::shutdown() até exit(1);#endif } e substitua entre ele por esse abaixo: void Game::shutdown() { std::clog << "Preparing"; Scheduler::getInstance().shutdown(); std::clog << " to"; Dispatcher::getInstance().shutdown(); std::clog << " shutdown"; Spawns::getInstance()->clear(); std::clog << " the"; Raids::getInstance()->clear(); std::clog << " server"; …

  18. Ola galera do tibia king, bom esse topico ja havia sido feito mais estava muito grande e confuso resolvir edita-lo para melhor compreende-lo, bom como o Titulo ja diz eu irei ensinar como adicionar Wayfarer Addon Full nas versoes 8.60. (Desculpe-me pelos erros nas acentuaçoes pois meus acentos nao esta funcionando, n~~ao). Bom vamos la. Abra a pasta DATA>NPC>SCRIPTS> e crie um arquivo chamado wayfarer.lua e coloque isso dentro local focus = 0 local talk_start = 0 function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then se…

  19. Started by Duuhzera,

    Bom galera, vejo que muita gente pede ajuda para adicionar coondown em magias, runas, actions, etc.. entao vim aqui ensianr como adicionar o tao procurado coondown Primeiramente abra seu script, e procure onde ele faz a funçao como: Na linha a baixo da funçao, adicione isto : 23006 é o storage do exaust, coloque diferente em cada magia/action/talkaction para nao interferir umas nas outras. 20 é o tempo em segundos para poder usar a magia/action/talkaction/ novamente. Após adicionar isto, e configura-lo, pule uma linha e pronto Espero ter ajudado!

    • 2 respostas
    • 959 visualizações
  20. Fala galera, sou o [ADM]Harlock do Pokémon Undewater, e hoje vim mostrar a vocês como por acentos quando estiver editando seus scripts. Por exemplo: Você vê; Você está vendo; Está carregando, Pokémon.1- Primeiro baixe o Notepad ++ (Clique aqui) Escolha um Script para editar: local pokes = { ["Charmander"] = {level = 16, go = "Vai Charmander", back = "Volte Charmander."}, ["Charmeleon"] = {level = 35, go = "Vai Charmeleon", back = "Volte Demon."}, ["Charizard"] = {level = 75, go = "Vai Dragon Lord", back = "Volte Dragon Lord."}, ["Mewtwo"] = {level = 8, go = "Vai Mewtwo", back = "Volte Mewtwo"}, } local msgunica = false function onUse(cid, item, frompos, …

    • 2 respostas
    • 1.6k visualizações
  21. Salve, pessoas. Recentemente criei esse script para meu servidor particular e, embora simples, dá uma margem legal para a criatividade de vocês. Trata-se de um script para dar uma função especial a uma weapon qualquer do seu servidor quando você enfrenta uma criatura específica (ou mesmo um tipo de criatura). Para isso utilizarmos uma função que pega o nome da criatura que você está atacando e verifica se ela pertence à sua tabela de verificação. Caso positivo, sua arma agirá de um modo diferente contra essa criatura específica. O feitio é simples: criar um script no diretório .../weapons/scripts com o nome à sua escolha. Ex: "nome.lua"…

  22. Started by UsToOliNN,

    Olá rapaziada fiz um video ensinando alguns conceitos basicos de C++ e mostrei como criar uma calculadora basicona, fiz esse video com intuito de ajudar e mostrar um pouco desse linguagem que foi ultilizada para fazer o nosso amado tibia :D

    • 2 respostas
    • 703 visualizações
  23. Started by LeoTK,

    Fala galera bom eu coloquei esse "sistema" recentemente no meu servidor e achei muito bacana então resolvi compartilhar com vocês que basicamente funciona da seguinte maneira quando o jogador usar a spell e subir o exaust de cooldown vai aparecer a mensagem no chat configurado assim não floodando o chat do default dos jogadores enfim vamos lá Primeiramente vocês vão precisar editar a source Source 0.3.6 8.54 Usem esse tópico do membro @MySticaL Clique Aqui Source 0.4 8.60 Usem esse tópico do membro @L3K0T Clique Aqui Após aplicar as configurações na source vamos configurar o servidor, criando um channel p…

  24. Started by Reds,

    Boa tarde, há algum tempo não posto scripts por falta de sugestão, porém hoje navegando encontrei um pedido muito antigo que não foi fechado, talvez o criador do tópico já concluiu, mas vou disponibilizar para outras pessoas que queiram o código. O tópico era: No tfs 0.4 rev 3884 tem a mesma configuração para envio de critico, então para iniciar, você deve ir até o arquivo weapons.cpp e colocar abaixo de: player->sendCritical(); o seguinte: target->sendCritical(); Em creature.cpp adicione no final do arquivo o seguinte: void Creature::sendCritical() const { if(g_config.getBool(ConfigManager::DISPLAY_CR…

  25. olá galera eu vi que muita gente tem esse problema de puxar um squirtle por exemplo e depois botar outra ball no slot e nascer 2 squirtle, e dai dps que nasceu 2 squirtle o cara puxa outra ball pro slot e puxa + 1 squirtle ai fica 3 squirtle fora da ball e então eu vou ensinar vocês como faz para arrumar esse bug e deixar apenas para puxar 1 poke de cada vez !!! primeiramente vocês vão em: /data/actions/scripts/goback.lua e vocês procurem por: elseif item.itemid == pokeballs[btype].on then e embaixo vocês botam: Spoiler if #getCreatureSummons(cid) == 1 then if item.itemid == 11826 or 11829 …

    • 2 respostas
    • 868 visualizações
  26. Started by Lyu,

    Olá TK, hoje venho publicar um sistema bem interessante que venho mexendo há algumas semanas, estou falando do Cam System, um sistema de nível avançado que coleta packets durante a jogatina e forma uma gravação daquele momento, onde você poderá assistir à essa gravação quantas vezes quiser, como um replay, porém o sistema está limitado somente para fins de estudos e curiosidades. Não recomendo utilizar em seu servidor, pois como está limitado, também está rodando dentro do TFS e pode pesar, já que não tive tempo para otimizá-lo e criar um server próprio somente para assistir às gravações. Também não está serializando/deserializando em arquivos.cam, está salvando na memóri…

    • 2 respostas
    • 1.9k visualizações
  27. Started by Lurk,

    Peço desculpas caso esteja postando na área errada, por favor movam o tópico. Isso é um tutorial O script já existe na base que o @WooX postou aqui mas quando tentei passar pro meu sv 0.4 ficava dando debug dai eu desisti na época. Dai eu tava tentando ajudar nesse tópico, tentei mais uma vez e consegui fazer funcionar. Exemplo de como fica ingame Vamos a instalação em data/globalevents/scripts crie um arquivo chamado eventcheck.lua e cole isso dentro local EventsListalist = { {time = "01:00", name = "Snowball Event"}, {time = "02:00", name = "DesertWar Event"}, {time = "03:00", name = "Capture The Flag…

    • 2 respostas
    • 1.4k visualizações
  28. Neste tutorial ira ser ensinado como checar se um servidor esta online ou offline atravez do ip e port . Componentes Adicione em seu formulário um componente ClientSocket (localizado na paleta Internet), 1 Button e 2 Edits (1 para IP e outro para Port). Altere as seguintes propriedades do ClientSocket: - Active: False - ClientType: ctNonBlocking - Name: ClientSocket Altere o nome dos Edits para: - Edt_IP - Edt_Port Altere o nome do Button1 para Btn_Checar Altere o nome do Formulário para Frm_Principal Programação 1. No evento OnClick do Btn_Checar coloque : ClientSocket.Host := Edt_I…

    • 1 resposta
    • 5.1k visualizações
  29. Started by KibeMatheus,

    Olá galerinha Ktibiana, Pra vocês que não sabem criar montros, ou não sabe balancear etc... Quem ler esse tópico vai aprender essa po$%! agora. Usarei o demon.xml totalmente modificado para que tenha mas exemplos nas partes onde cria mais dúvida as pessoas: <monster name="Demon" nameDescription="a demon" race="fire" experience="6000" speed="280" manacost="0"> <health now="8200" max="8200"/> <look type="35" corpse="5995"/> <targetchange interval="5000" chance="8"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illu…

    • 1 resposta
    • 1.8k visualizações
  30. Started by TonyHalk,

    •Como assim Efeito Bônus? Simplesmente usando o Itens.xml, você pode fazer de itens comuns e sem utilidade, itens bons. Veja um exemplo abaixo: esse exemplo eu peguei uma magma boots: E adicionei um efeito "manashield" ou seja, um item muito util para as vocações pois adiciona automaticamente "utamo vita" au seu character. Ela é infinita, caso você queira adicionar um tempo, adicione a seguinte tag no script: Explicando melhor: ID do item (ID da boot) Nome dado ao item Peso Defesa (Você escolhe) Slot (Não mude) Descrição •Você também pode pegar outros itens e adicionar outros efeitos leg…

    • 1 resposta
    • 946 visualizações
  31. Started by 3visan,

    Introdução Aula 1 O que é scripting? Do modo mais simples possível: scripting é o ato de programar. O nome scripting vem do nome "script". O que é um script? De um modo geral, um script é um bloco de Código escrito em uma linguagem de programação interpretada, ou seja, ele precisa que alguma coisa leia ele e possa "traduzir" seu conteúdo. Lembre-se de que "script" não é um termo específico de Open Tibia Servers. O que é uma linguagem de programação interpretada? Os brasileiros falam português, ingleses falam inglês e chineses falam mandarim, e com isso o mundo é composto por várias línguas. No mundo da programação não é diferente. Existem v…

    • 1 resposta
    • 5.1k visualizações
  32. Started by 3visan,

    Bem amigos da rede globo, estou aqui para dar continuidade as aulas. E a aula de hoje é sobre Funções, suas utilizações e como criar. O que são? Bom, você jovem padawan já deve ter se deparado com algo assim em algum script: function doPlayerAddAddons(cid, addon) for i = 0, table.maxn(maleOutfits) do doPlayerAddOutfit(cid, maleOutfits[i], addon) end for i = 0, table.maxn(femaleOutfits) do doPlayerAddOutfit(cid, femaleOutfits[i], addon) end end Peguei essa função no arquivo lib/functions.lua Isso é uma função (dãa). As funções são blocos de instruções (comandos) que o servidor lê e executa. Você tem a liberdade de criar elas na pa…

    • 1 resposta
    • 1.8k visualizações
  33. Started by Skydangerous,

    Manipulações de Strings. Strings devem estar entre aspas (simpes ou duplas). local texto1 = 'Ola mundo.' local texto2 = "TibiaKing" Funções Báscias string.byte() Retorna o valor da tabela ASCII s = string.byte('A') print(s) string.char() Retorna um caracter a partir do valor numérico da tabela ASCII. s = string.char(66) print(s) string.len() Retorna o tamanho da string. s = 'Programar em LUA é muito fácil.' a = string.len(s) print(a) string.lower() Retorna um string com os caracteres maiúsculos convertidos para minúsculo s = 'Programar em LUA é muito fácil.' a = string.lower(s…

    • 1 resposta
    • 1.3k visualizações
  34. Started by MaXwEllDeN,

    << Aula 6 - Escopo Estruturas de controle Aula 7 Bem-vindos à Aula 7 (Da sorte). Hoje iremos aprender mais uma coisa importantíssima na área de scripting e programação em geral: as Estruturas de Controle. Bem, Estruturas de Controle definem o andamento do script. Para entendermos melhor, vamos ver o algoritmo de uma Estrutura de Controle simples: Veja, agora um em lua: Compare as cores do script em Lua com o escrito em português. Nossa Estrutura de Controle se chama condição, iniciada por if (se). Para entendermos basta traduzir. Veja como se usa o if: Citado acima, true seria o que vai ser verificado, exemplo: …

    • 1 resposta
    • 2.5k visualizações
  35. Started by Ryzor,

    Tabelas - Open Lua #1 Olá galerinha , tudo tranquilo? Agora que passaram-se as comemorações festivas do carnaval, estou de volta com mais uma aula para auxilá-los a criarem seus scripts. Hoje estarei ensinando a criar e manipular tabelas na linguagem LUA. A aula está dividida em 2 partes! Considero no nível: INICIANTE Sem mais delongas, vamos lá! ~ Introdução Bem, vamos aprender a trabalhar com tabelas, mas antes devemos saber: - O que são tabelas? ~ Tabela é uma variável que pode armazenar outras variáveis dentro dela. - Porque eu devo usar tabelas? ~ Ao invés de criar uma infinidade de variáveis, você pode simplesmen…

    • 1 resposta
    • 879 visualizações

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Informação Importante

Confirmação de Termo