Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 12/04/13 em todas áreas

  1. Omega

    Queries e SQL para OTservers

    Esse é um tutorial básico sobre SQL e as funções LUA que são usadas em OTServers. Definição Primeiramente, deve ser útil uma definição de banco de dados: são, fundamentalmente, conjuntos de informações armazenadas em tabelas. Para OTServers, são onde todas as informações sobre as contas e personagens são guardadas. SQL (Structured Query Language) é uma linguagem que é usada por quase todos os bancos de dados (no nosso caso, todos). Quando você envia comandos em SQL para o seu banco de dados, você pode modificá-lo ou extrair valores dele. Query (queries no plural) são consultas ou comandos que são enviadas para o banco de dados. Introdução Para nós, scripters, às vezes é fundamental tirar informações ou mudar valores dos personagens que só estão disponíveis no banco de dados, para isso existe uma biblioteca de funções que já vem com os servidores, a biblioteca db (de database, que significa banco de dados em inglês). Dela, usaremos principalmente duas funções: db.getResult Retorna os valores que foram selecionados em uma query db.query ou db.executeQuery Executa uma query usada para modificar informações no banco de dados. Essa função se chama db.executeQuery na maioria dos servidores, mas também pode ser utilizada como db.query em outros. Em ambos os casos, a query deverá ser usada entre aspas. Queries em SQL Primeiramente, devemos saber como executar queries diretamente no banco de dados. Para isso, faça download de um banco de dados que eu disponibilizei abaixo como anexo. Use também o sqlite studio, que você pode baixar aqui. Assim que você abrir o banco de dados com o sqlite studio você verá que está dividido em duas janelas: a da esquerda de navegação e a da direita com os dados em si (no caso está branco quando abre). Abra a árvore do banco de dados e selecione a tabela players clicando duas vezes. Você verá a estrutura do banco de dados, com os nomes das colunas e o tipo de dados de cada uma (INT, INTEGER, VARCHAR, BOOLEAN, etc). Em seguida, selecione a aba 'Data' para ver os dados que estão na tabela. Lá estarão todos os jogadores cadastrados no servidor, com várias informações. Essa é a aba importante para nós. 1. SELECT Depois disso, vamos tentar executar um primeiro comando no banco de dados: use ALT+E para abrir o editor de queries e digite: SELECT * FROM players Então, aperte F9 e veja o resultado. O que deve acontecer é aparecer toda a tabela players que você já havia visto. Perceba como, em geral, SQL é uma linguagem bem direta: a query que você enviou para o banco de dados significa: SELECIONE * DE jogadores E ela faz isso, com a exceção de que * significa todos os dados da tabela. OBS.: Apesar de quase toda query de SQL estar nesse padrão, ela é uma linguagem que não é case sensitive, logo select * from players Dá no mesmo. Mas fica menos legível, assim utilizamos letras maiúsculas para as palavras-chave dos comandos e letras minúsculas para os nomes de tabelas e colunas. Vamos testar outra query, um pouco mais complicada: SELECT name, level FROM players Dessa vez não selecionamos todos os dados da tabela, apenas o nome e o level de cada jogador. A sintaxe do comando SELECT é: SELECT nome_da_coluna_1, nome_da_coluna_2,..., nome_da_coluna_n FROM nome_da_tabela Assim teremos como retorno os valores dessas colunas para cada elemento da tabela. Tente selecionar apenas o nome e a posição (x, y e z) de cada jogador e confira abaixo. Complicando um pouco mais, vamos ordenar a tabela players por level: SELECT * FROM players ORDER BY level DESC Adicionamos a palavra-chave ORDER BY e DESC. A primeira significa 'ordene por' e a segunda, 'decrescente'. Ou seja, ordenamos nossa tabela com base na coluna level de maneira decrescente. Se você ocultar o DESC, a ordem natural vai ser crescente. Agora vamos filtrar nossos resultados: SELECT name, level FROM players WHERE level > 100 ORDER BY level DESC Assim obtemos apenas os jogadores com level maior que 100 e ordenados de maneira decrescente pelo level. A palavra-chave WHERE significa 'onde' e introduz uma condição para os resultados. Complicando ainda um pouco mais, vamos fazer a mesma coisa, mas para os jogadores com level entre 100 e 200 (sem contar nenhum dos extremos). SELECT name, level FROM players WHERE level > 100 AND level < 200 ORDER BY level DESC Portanto podemos usar AND e OR para escolher melhor os resultados. Para selecionar os extremos, podemos usar os operadores '>=' (maior ou igual) e '<=' (menor ou igual) ou simplesmente: SELECT name, level FROM players WHERE level BETWEEN 100 AND 200 Tente pegar os magic levels dos jogadores com level entre 50 e 100 (excluindo os extremos) e vocação 2 (druids), ordenados pelo level de maneira decrescente. Confira abaixo: 2. UPDATE Nesse ponto, eu recomendo que você faça um backup do banco de dados de teste para que, caso você mexa em algo e não saiba reverter, possa trocar facilmente. Esse é o comando em SQL para alterar informações em uma tabela. Vamos começar com um exemplo simples: mudar o nome de uma guilda. Faremos isso usando o comando UPDATE, cuja sintaxe é: UPDATE nome_da_tabela SET nome_da_coluna = valor Para mudar o nome de uma guilda, precisamos usar o UPDATE, mas se fizermos: UPDATE guilds SET name = 'We Keel You' Estaremos mudando o nome de todas as guildas do servidor para 'We Keel You' (as aspas devem estar presentes sempre que a informação que você está tratando é do tipo string, ou seja, um texto). Agora tente mudar apenas o nome da guilda Ownage para We Keel You. Confira abaixo: Atualize a tabela guilds apertando F5 e perceba que agora a última guilda listada se chama We Keel You. Perceba que a maioria das tabelas tem uma coluna id. Essa é uma coluna importante para reconhecer cada elemento da tabela. OBS.: Prefira sempre trabalhar com números do que com textos. Agora vamos mudar o nome e a mensagem de uma guild: UPDATE guilds SET name = "Bumbum de bebe", motd = "Seja bem vindo!" WHERE id = 2 Agora mudamos, com um UPDATE só, a mensagem (motd) e o nome da guilda com id 2 (Power Abusers). Em alguns casos, queremos acrescentar e não mudar o valor de alguma coluna. Podemos fazer como o exemplo abaixo, no qual todos os jogadores serão promovidos, desde que já não o sejam. UPDATE players SET vocation = vocation + 4 WHERE vocation <= 4 3. INSERT INTO Esse é o comando em SQL para inserirmos dados em uma tabela. Para criar um jogador, por exemplo, podemos utilizar esse comando assim: INSERT INTO players VALUES (1, "Char de Teste", 0, 1, 1, 8, 3, 150, 150, 4200, 114, 92, 0, 0, 0, ...) Ou seja, estamos inserindo na tabela players os valores 1, "Char de Teste" , 0, 1, 1, 8, 3, 150, 150, 4200, 114, 92, 0, 0, 0, etc. Esses valores são inseridos na ordem das colunas, então 1 é o id, "Char de Teste" é o nome e assim por diante. Essa é uma das formas de se usar o comando INSERT INTO, mas existe outra: INSERT INTO nome_da_tabela (coluna1, coluna2, coluna3, ...) VALUES (valor_da_coluna1, valor_da_coluna2, valor_da_coluna3, ...) 4. ALTER TABLE Esse é um comando um pouco mais complicado porque sua sintaxe varia bastante dependendo do banco de dados. Em OTServers, esse comando é usado principalmente para acrescentar uma coluna em uma determinada tabela. Por exemplo, para criar um sistema VIP pelo banco de dados, poderíamos usá-lo. Sua sintaxe fica assim: ALTER TABLE nome_da_tabela ADD nome_da_coluna tipo_de_dado (restrições e padrões) O tipo de dado define quais dados são aceitáveis como valores da coluna. Por exemplo, uma coluna que conterá nomes deve ter como tipo de dado varchar(255). Esse é um padrão que eu vejo nos servidores e significa que serão aceitos caracteres variáveis com comprimento de até 255. Entretanto, o SQLite ignora qualquer número em parênteses e não define um máximo baseado nisso. O máximo é padronizado para 1000000 de bytes (sqlite.org/datatypes). Procure saber como funciona se você usa outro banco de dados (MySQL, por exemplo). Para um número, use INT (que significa inteiro). Acho que são só esses dois tipos de dados que são comumente usados quando se trata de OTServers. Para mais informações, clique aqui. As restrições são valores que não serão aceitos na coluna, como NOT NULL (para não aceitar valores nulos e facilitar posteriores tratamentos de erros), enquanto padrões são valores que serão inseridos automaticamente na coluna, se nenhum outro for especificado. Por exemplo, ao criar um jogador, vários valores tem padrão (default) 0. Não faz sentido um jogador começar com skull diferente disso, né? Ambas as restrições como valores padrão são opcionais. Exemplo: ALTER TABLE players ADD vip_time INT NOT NULL DEFAULT 0 É possível criar colunas, mas nem sempre é possível deletá-las diretamente. Com SQLite, teríamos que passar todos os dados para uma tabela temporária e, dessa tabela, extrair apenas as colunas que queremos para deletar uma coluna. Portanto, sempre faça um backup quando for usar esse comando. 5. COMANDOS COMPOSTOS Para introduzir essa seção do tutorial, tente esse exercício: selecione o valor do storage 2308 para o jogador "Hulk". Esse comando é mais complicado que os outros pois ele combina dois SELECTs. Perceba que não é possível selecionar o valor do storage diretamente pelo nome, mas é possível determinar o storage pelo id e o id pelo nome. Então temos que acessar a tabela players para selecionar o id do Hulk e depois, com esse id, selecionar o valor do storage 2308. Comandos dentro de outros comandos devem ser usados entre parênteses. Também não podemos ver o skill de um jogador diretamente. Temos que saber seu id e, na tabela player_skills, comparar o número do skill com o id do jogador. Para obtermos os skills de um jogador, podemos executar o seguinte: SELECT skillid, value FROM player_skills WHERE player_id = (SELECT id FROM players WHERE name = "Hulk") Assim conseguindo obter os skills e seus valores do jogador Hulk. Tente mudar o valor do storage com key 2308 do jogador "Hulk" para 10. Confira abaixo. Queries SQL em LUA Agora, vamos voltar ao nosso mundo de scripting LUA. Agora que já sabemos como usar as queries, vamos aplicá-las: que tal criar um ranking com o TOP 10 do seu servidor em uma talkaction? Primeiramente, vamos definir a query SQL que usaremos: queremos os nomes e os levels dos 10 maiores levels do servidor. Tente criar a sua e compare: Sim, existe uma palavra-chave nova nessa query que não foi apresentada anteriormente. LIMIT define um limite de valores retornados. Assim impedimos que nossa lista fique maior do que os 10 que queremos mostrar. Agora precisamos escolher a função que vamos usar no script. Voltando ao início do tutorial, percebe-se que o SELECT deverá ser associado ao db.getResult. Portanto, nossa função principal do script deve ser: db.getResult("SELECT name, level FROM players ORDER BY level DESC LIMIT 10") Colocando isso numa talkaction: function onSay(cid, words, param) -- Salvando os resultados da query em uma variável local query = db.getResult("SELECT name, level FROM players ORDER BY level DESC LIMIT 10") -- Criando uma tabela para passar os resultados local list = {} -- Checando se a query foi mal-sucedida (se ocorreu alguam problema, o código irá retornar verdadeiro e nada será exibido) if query:getID() == -1 then return true end repeat -- Armazenando o nome da linha atual do resultado na variável name local name = query:getDataString("name") -- Armazenando o level da linha atual do resultado na variável level local level = query:getDataInt("level") -- Inserindo a string com o nome e o level na tabela table.insert(list, name.. " - level: "..level) -- Termina o loop se não houver mais resultados ou passa pro resultado seguinte until not query:next() -- Envia a mensagem pro jogador, concatenando os resultados com uma quebra de linha doShowTextDialog(cid, 2148, table.concat(list, "\n")) -- Libera os resultados armazenados query:free() return true end Explicando: Primeiramente salvamos nossos resultados em uma variável chamada query. Para isso, usamos o db.getResult citado anteriormente. Em seguida, criamos uma variável list, uma tabela vazia, que será utilizada para manipular os resultados. A checagem para saber se algum resultado foi obtido pela query é usar o query:getID(). Se ele for maior que -1, então existem resultados obtidos. Começamos um loop repeat para analisar cada linha do resultado Para pegar o "name" da linha de resultado que temos na query, utilizamos o query:getDataString("nome_da_coluna") e salvamos na variável name. Fazemos o mesmo para uma variável level, lembrando que o tipo de dado será Int (inteiro), então utilizamos query:getDataInt("nome_da_coluna") Insere na tabela list um texto do tipo: Eternal Oblivion - level: 300, de acordo com a linha atual do resultado O método query:next() retorna a próxima linha do resultado se houver ou nil. Assim, passamos pra próxima linha ou terminamos o loop Com o texto formado, utiliza-se a função doShowTextDialog para enviar para o jogador que usou a talkaction, juntando (concatenando) a tabela com os resultados com uma quebra de linha ("\n") Liberamos os resultados armazenados pela query e fechamos o script E assim você acabou de criar uma talkaction com o ranking dos jogadores do seu servidor com base no level! Então essa é a base necessária para se acessar o banco de dados através de scripting. O resto depende da sua criatividade. Exercícios 1 - Selecione o maior magic level do servidor 2 - Adicione 5 dias de dias premium para todas as contas 3 - Selecione o nome do líder da guild com id 2 4 - Insira um novo storage com key 71236 e valor 1 para o top level do servidor 5 - Crie uma talkaction que fará com que todos os jogadores sejam teletransportados para uma posição definida, estando offline ou online. W3schools SQL Quiz Fontes Consultadas http://www.w3schools.com/sql/ http://www.sqlite.org/ Considerações Seria injusto não dar os devidos créditos ao , cujos códigos serviram de base para meu aprendizado em relação à SQL e às funções LUA relacionadas. Scan do arquivo DB_Teste.rar
    4 pontos
  2. comedinhasss

    [Arquivado]Projetos no GitHub

    Olá galera, ultimamente está saindo várias novidades para os servidores e eu estou atualizando para os brasileiros :3 Venho aqui abrir uma lista de projetos que estão sendo desenvolvidos no GitHub e postando meus comentários... OpenTibia Server: https://github.com/opentibia/server Esse projeto estava anos parado e parece que recentemente voltou a ativa, mas não está com suporte para novas versões e atualizações são raras. OpenTibia Item-Editor: https://github.com/opentibia/item-editor Se lembram do Otitemeditor by Comedinha? ele era esse projeto só que com várias modificações minhas que recentemente eu mandei para a equipe e eles estão utilizando. The Forgotten Server 1.0: https://github.com/otland/forgottenserver Esse servidor em seu inicio gerou muita polêmica sobre quando estaria pronto para os servidores e hoje eu já posso dizer que está, ele há alguns meses foi atualizado com a maioria das funções do TFS 0.4, e quem não sonhava com isso? Um TFS que partiu do 0.2 com as funções do 0.4. Otclient: https://github.com/edubart/otclient É o melhor cliente alternativo de tibia até agora desenvolvido, com ele você pode adicionar mods, colocar coisas novas pelos creaturescripts da TFS 1.0 e da 0.4, e promete muita coisa ainda :3 ForgottenMapEditor: https://github.com/decltype/forgottenmapeditor Já tem um tópico na área de utilitários sobre ele, mas eu aqui digo que aprovo o utilizo e ainda ajudo no desenvolvimento (não sou da equipe mas ajudo :3). Otclient object editor: https://github.com/TheSumm/otclient-strmed Não sei muito bem em qual será desenvolvido e qual será o nome mais esse cliente que também é um mod do Otclient está prometendo :3 Znote ACC: https://github.com/Znote/ZnoteAAC Para quem achou que o projeto está parado, não. Ele agora também está no github há algum tempo :3 Gesior ACC: https://github.com/gesior/Gesior2012 Quem achou que o Gesior tinha morrido levanta a mão \o Ele está desenvolvendo ainda e com versões recentes :3 Crystal Server: https://github.com/tryller/crystalserver O Tryller voltou com o projeto e está utilizando a TFS 0.4 com a versão mais recente do tibia, esse projeto promete :3 Alissow Server: https://github.com/BrunoDCC/Alissow O projeto não para, ele tem atualizações demoradas mas quando tem vem coisa nova e cada vez mais compatível com a atualidade :3 Nele no momento estou refazendo meus scripts para funcionarem 100%. Boa parte já está pronta. Tibia Editor: https://github.com/decltype/TibiaEditor O tibia editor em sua ultima commit foi para o GitHub, eu compilei ele e funcionou 100% mas não vou focar pois estou na espera do mod para o otclient. Remere's Map Editor: https://github.com/hjnilsson/rme O famoso Remere's Map Editor voltou e agora está em open source também com um projeto no github. Conhece mais algum projeto que foi para o GitHub? Conta ae \o
    3 pontos
  3. Lordbaxx

    [Pokemon] PoKeMon Steel

    Iae galerinha firmezinha tudo na paz?? Bom Tava editando um servidor pro meu amigo fiz várias coisas acabou que ele n quis mais então perdeu né ;P. O Servidor Tem Várias Novidades e Edições feitas por mim.... Menu - Informações - Erros/Bugs - Prints - Download Informações -Nick System 100% -Outlands 100% [ Com Todos Pokemons de Outland 100% Balanceados ] -Evolutions 100% - Moves m1 / m12 99% [ Só falta os moves de alguns lendario como , Celebi, Raikou , Suicune, Entei.] -Pokeballs [ Normal Ball - Super Ball - Great Ball - Ultra Ball] -Fly, Surf, Ride, Dig, Cut e as demais Order's 100% -Control Mind 100% -Sem Lvl System - Mapa by PxG -Tv System 100% -Box's 1 , 2 , 3 , 4 - 100% -PokeDex 100% -Quests 100% - Boost System 100% -Pokes Iniciais 100% - Markt 100% -Sprites Todas que Consegui - Vocês Verão nos Print's -Novo Shiny Adicionado - Shiny Scizor 100% - Moves, Dex , Foto , Corpse , Catch 100% Erros Print's Dowload's Créditos Gostou??? É proibido pedir pontos de reputação (likes) em troca de qualquer atividade dentro do fórum. ALÉM DE PROIBIDO É FEIO! Conteúdo á esqc de colocar o print do novo shiny dragonite vejam no jogo...
    2 pontos
  4. 2 pontos
  5. Killua

    [Blood Castle] Evento Otimizado![12/04/14]

    Últimas atualizações: 16/12/2013: [ATUALIZADO 12/04/2014] Introdução: Eai gente, vcs conhecem o evento Blood Castle que tem no jogo MU? Então, eu resolvi criar esse evento para OpenTibia e ficou bem legal Informações: OBS: NÃO é obrigatório o uso do mapa que vou por aqui, ele serve somente para exemplo. #Dica: Acho que fica legal o premio do evento ser um item que da double exp por um tempo. Atualização: Resolvi refazer o código, para facilitar a instalação e melhorar o funcionamento do evento. O que mudou? Instalando o evento: Lib: Movements: Creaturescripts: Monsters: O evento pode acontecer de duas maneiras: automática ou manualmente. Vou por as duas possibilidades: Automático: Manual: Como Configurar: * Se você for colocar, dentro do evento, um teleporte para as pessoas que não quiserem mais participar, coloque o Action ID 9371 nele. * Lembre-se de por NO-LOGOUT tool e NO-PVP tool em toda área do evento!! Todas as demais explicações estão na lib, mas vou demonstrar como configurar os mais "confusos". No modo automático, você configura de quanto em quanto o tempo o evento vai acontecer. Nessa tag: <globalevent name="Blood Castle" interval="3600" event="script" value="BloodGlobalEvent.lua"/> Aqui está 3600 segundos, ou seja, 1 hora. * Se seu servidor for em milisegundos, multiplique o número por 1000, assim: 3600 segundos * 1000 = 3600000 milisegundos = 1 hora. No modo manual, para iniciar o evento, basta usar a talkaction /blood-start com seu god. Em posGuarda, vc deve colocar a posicao do Guarda do Portao, como mostrado abaixo: As posPedras são onde ficam as pedras que tampam a passagem enquanto o evento não esta aberto, conforme na imagem abaixo: Em estátua, vc deve colocar a posição em que o arcanjo vai ser criado, conforme na imagem abaixo: Nas posParedes, vc deve por a posição das paredes que bloqueiam a entrada do castelo e que são removidas quando o guarda morre, conforme abaixo: Em fromPos e toPos, você vai por o canto superior esquerdo e o canto inferior direito do mapa do seu evento, respectivamente. Dessa maneira: As outras configurações eu acredito que já estejam bem explicadas. Espero que gostem dessa nova versão. Recomendo a todos que já usam o evento, reinstalar com essa nova versão. Qualquer dúvida ou bug, postem que irei responder. Download do mapa exemplo: Blood Castle.rar
    1 ponto
  6. comedinhasss

    [TFS 1.0] Mapa global 10.41

    Olá galera, ultimamente está saindo várias novidades para os servidores e eu estou atualizando para os brasileiros :3 Novidades: - Nova Ab'Dendriel - Nova Venore - Nova Defia - Novas cidades incluindo Zao, Gray Beach e Gnome Base! - Todos NPCs - Razachai & Quirefang - Tasks - Warzones - Todas as novas spells - Barcos e tapetes voadores 100% - Offline training - Montarias - Sistema de Kazordoon Wagons - Sistema de banco - 100% quests with missions: Annihilator, Demon Helmet, Pits of Inferno, The Inquisition Quest, In Service of Yalahar, Isle of Evil, The Djinn War, The Ancient Tombs, Dreamer's Challenge, Bright Sword, The Unnatural Selection quest, Banshee Quest, Demon Oak, Svargrond Arena e muito mais! Download: Info: Client: 41 TFS: 1.1 Detalhe: Este servidor foi compilado num windows 7 64x. Servidor https://github.com/PrinterLUA/FORGOTTENSERVER-ORTS/archive/master.zip Github https://github.com/PrinterLUA/FORGOTTENSERVER-ORTS Executavel http://www.xtibia.com/forum/topic/232870-the-forgotten-server-11/ Source https://github.com/otland/forgottenserver Créditos Printer Comedinha Tópico original: http://otland.net/threads/best-released-real-map-10-22-based-1-0.204514/
    1 ponto
  7. otavio101

    Show-off Otaviogfl

    Os sites de one piece foram feitos para 1 antigo projeto de Ragnarok que eu participei, já o site de digimon para o DigiWO. One Piece V1 One Piece v2 Digimon
    1 ponto
  8. Dynkzin

    PokexVnzl

    Ola Vim aqui disponibilizar meu ot de pokemon que comprei,como nao vo usar vo postar aqui =d Informaçoes •Mapa com hunts kanto. •Server Sem System de level !. •Clan System (PDA Slicer). •Alguns bugs corrigidos. •Pokemons da 1° até a 2° geração. •novas sprites do PxG. •Taunt System, para todos os clan rank 5, e algumas outfits. •novas paredes, pisos, e itens PxG. •Npc De itens de task de clãns. •Shinys Espalhado pelo mapa. •Moves system (m1 a m12). •Maximo 6 pokemonsna bag. •Order 100%. • Outland 100% no seu especifico clan ela esta Screen Shoot Do Mapa Download : Server - http://www.mediafire.com/download/puc9x6o8lo6i6af/Server+PxVzla.rar Scan - https://www.virustotal.com/pt/file/a5b16167f7c0599716c03d0d379858f337726216d958eef9455298b1e7daa99f/analysis/1386175577/ Cliente - http://www.mediafire.com/download/hk0ubgqglgb6a8m/PxVzla+Client.rar Scan - https://www.virustotal.com/pt/file/bdf2d1e90d8f65086343bab9ae7b681dd3945b9bdfa4e713b6ee555835a2c7fa/analysis/1386176114/ Senha do God acc - yoelvis senha - 2006905 Creditos : Yoelvis Sneider Por ter criado o server Espero que Gostem, Bom Aproveito =]] Obs : como não fui eu que criei,eu comprei, entao como sou apenas 1 hoster nao sei mecher muito em scripts me desculpem =/
    1 ponto
  9. comedinhasss

    Gesior ACC

    Olá galera, ultimamente está saindo várias novidades para os servidores e eu estou atualizando para os brasileiros :3 Você sabia que o gesior também migrou para o GitHub? Bom, ele migrou e agora está atualizando para todas as versões :3 Download: TFS 1.0: https://github.com/gesior/Gesior2012/tree/TFS-1.0 TFS 0.4: https://github.com/gesior/Gesior2012/tree/TFS-0.4_rev_3703+ TFS 0.3.6: https://github.com/gesior/Gesior2012/tree/TFS-0.3.6_and_0.4_to_rev_3703 TFS 0.2.13+: https://github.com/gesior/Gesior2012/tree/TFS-0.2.13+ TFS 0.2.11-: https://github.com/gesior/Gesior2012/tree/TFS-0.2.11_and_older É só baixar e se divertir pois os mais recentes vem com correções de bugs e muito mais :3
    1 ponto
  10. Alexclusive

    [Medalhas] RECEBA A SUA AQUI!

    Neste tópico estarei entregando as as medalhas de todos que estiverem faltando! A maioria de vocês devem saber que tivemos problemas técnicos com nosso sistema de Awards. Tivemos instalar tudo de novo e agora estou adicionando as medalhas manualmente. Segue a baixo a lista das medalhas que serão distribuídas. Você tinha alguma delas? Completou 400 posts e ainda não recebeu a sua de membro? Comente aqui me avisando! Membro Atingiu 400 posts e se tornou membro da comunidade. A medalha mais usada é a do Membro. (Estarei entregando para todos os membros que postarem aqui com mais de 400 posts.) Membro honorário O usuário é um membro honorário. Ele participa do fórum ativamente, ajuda bastante usuários e contribui com conteúdo, além de ter uma reputação elevada. (Estarei entregando para todos aqueles que já tinham e comentarem aqui) Herói Serviços prestados. Medalha dada para aqueles que prestaram serviço ao Xtibia. (Estarei entregando para todos aqueles que já tinham e comentarem aqui) Conto com a compreensão e paciência de todos! Atenciosamente, Alexandre.
    1 ponto
  11. Ta Dando Esse Erro Aqui Preciso Da Ajuda De Vocês !! Quem Poder Ajudar Fico Grato Des De Já !! [04/12/2013 21:28:45] [Error - CreatureScript Interface] [04/12/2013 21:28:45] data/creaturescripts/scripts/login.lua:onLogin [04/12/2013 21:28:45] Description: [04/12/2013 21:28:45] data/lib/level system.lua:31: attempt to perform arithmetic on local 'd' (a nil value) [04/12/2013 21:28:45] stack traceback: [04/12/2013 21:28:45] data/lib/level system.lua:31: in function 'getPokemonXMLOutfit' [04/12/2013 21:28:45] data/creaturescripts/scripts/login.lua:152: in function <data/creaturescripts/scripts/login.lua:123> [04/12/2013 21:28:46] Account Manager has logged out. Esperando Atenciosamente , By Necroks !!
    1 ponto
  12. ShinySprite

    Sprites livres

    para ficar bom no server é só botar a outline preta. O resto o Xtibia deu problema e tive que postar em download, mais vou postar as screens. http://www.4shared.com/zip/J7VZefZs/Xtibia.html
    1 ponto
  13. kaizy536

    Tirar Pz

    Boa noite povo do xtibia, entao, eu queria pedir uma coisa, pode ate pareçer besta pra quem entende, mais pra min nao é kkkk, porque to com isso a uns 3 dias e nao sei oque fazer, entao recori a postar aki minha duvida.. Enfim, vamos ao problema/duvida.. Eu criei uma zona no meu server, a principio eu botei a zona como PZ Tool e como No Pvp Tool, porem depois me arrependi, porque agora eu quero por monstro naquela area, agora vem minha duvida: Como eu faço pra tirar essa bendita PZ Tool, pra poder criar spawns na area? PS: Nao posso simplesmente dar Ctrl Z, pois ja tinha salvo o mapa. Obrigado
    1 ponto
  14. Amigo posso te ajudar em algumas coisas mais mapear exige muito esforço e dedicação .. aqui no fórum na seção de mapper você ira encontrar vários tutoriais de mapper do começo até você virar um Expert no assunto.. Se te ajudei dá um rep+ awe! _____________________________________________________________________________________________________
    1 ponto
  15. Tipo Cara Eu Que Sou O Dono Do Serv Eu Exclui Os Pokemons E Criei Digimons Com CLient E Sprites Diferentes Por Isso NAO esta logando Poderia Me Ajuda?
    1 ponto
  16. Omega

    Arma que só ataca Player

    Jovens padawans, pelo que eu entendi, fica muito mais fácil fazer usando weapons: E registra no weapons.xml: <wand id="id da wand" level="level para usar" mana="mana que gasta com cada hit" event="script" value="wandtry.lua"> <vocation id="1"/> <vocation id="5"/> <vocation id="2"/> <vocation id="3"/> <vocation id="4"/> <vocation id="10" showInDescription="0"/> </wand> Aí é só mudar o script pra usar a fórmula que você quiser e ajeitar as tags pra suas necessidades. Então é só felicidade. No caso, isso é uma rod ou wand que dá dano de energy, adapte pro que você preferir. Ah, salva esse código em weapons/scripts como wandtry.lua
    1 ponto
  17. Em data/npc, coloque um novo arquivo com o nome BD.xml e cole isso dentro: Após, na pasta script, crie um arquivo chamado "BD.lua" e cole isso: PS: Não testei, mas veja ai... Se der algum erro só chamar! ^^ PS²: Você não falou os preços, então todos estão por 10 Diammonds... Se quiser mudar avisa que posso editar pra você! ^^
    1 ponto
  18. Nossa, belo tutorial, tá de parabéns, meu deus.
    1 ponto
  19. 1 ponto
  20. Nu77

    como mandar u16 de vez de u8

    Não é questão de compartilhar ou não, eu disse tudo que precisa ser feito ( mostrei até onde modificar... ) só ter interesse olhar um pouco como funciona o código e alterar algumas coisas, nada complicado, qualquer um com interesse mesmo ia conseguir fazer... Posso estar sendo chato, mas eu não sou a favor de dar nada de mão beijada. Boa sorte.
    1 ponto
  21. Killua

    Arma que só ataca Player

    Entendi, mas testa ai o que eu fiz pra armas corpo-a-corpo so pra gente ter uma base: @EDIT - tava com um erro mas arrumei, testa ai. local id_da_arma = 4322 -- id da SWORD local dano = 100,1000 -- dano minimo e maximo function onCombat(cid, target) local formula = getPlayerLevel(cid) * getPlayerSkillLevel(cid,2) if getPlayerSlotItem(cid,5).itemid == id_da_arma or getPlayerSlotItem(cid,6).itemid == id_da_arma then if isMonster(target) then if combat == COMBAT_PHYSICALDAMAGE then doCreatureAddHealth(target, -math.random(dano)) return false end end elseif isPlayer(cid) and combat == COMBAT_PHYSICALDAMAGE then doCreatureAddHealth(target, -formula) return false end return true end
    1 ponto
  22. alissonfgp

    Global Server 10.10

    eu ja atualizei esse meu server cm a nova source 1.0, qnd sair a versao 10.30 eu vou disponibilizar no forum
    1 ponto
  23. Siga este tutorial.
    1 ponto
  24. Tenta dessa maneira: data/creaturescripts/scripts, crie um arquivo com extensão .lua, nomeie-o logindeath, e coloque o seguinte conteúdo: function onLogin(cid) local level = 1000 - getPlayerLevel(cid) if getPlayerLevel(cid) < 1000 then doPlayerAddLevel(cid, level) end return true end Depois, em data/creaturescripts, abra o arquivo creaturescripts.xml, e coloque a seguinte tag: <event type="login" name="LoginLevel" event="script" value="logindeath.lua"/> Assim, toda vez que o player morrer/logar, e se encontrar em um level abaixo de 1000, será adicionado à ele os levels restantes para 1000. (se morrer e voltar para o level 990, ao logar, o jogador será upado para o level 1000.)
    1 ponto
  25. ta ai, só pq hj eu to legal
    1 ponto
  26. Copie o items.xml e items.otbm do seu servidor e salve-os na pasta do remeres em data/860...
    1 ponto
  27. kaizy536

    Pedido !aol e !bless

    Bom, comando !aol e !bless eu tenho.. Aqui esta: Aol: @Edit Promotion
    1 ponto
  28. Se funcionou esta de parabéns amigo, em breve estarei trazendo mais conteúdos.
    1 ponto
  29. Zaruss

    Erro no zombie event.

    Quando o zombie event inicia e aparece da uns erros na distro esse aki: [22/10/2013 05:42:32] [Error - CreatureScript Interface] [22/10/2013 05:42:32] data/creaturescripts/scripts/zombie.lua:onStatsChange [22/10/2013 05:42:32] Description: [22/10/2013 05:42:33] data/lib/032-position.lua:2: attempt to index global 'position' (a nil value) [22/10/2013 05:42:33] stack traceback: [22/10/2013 05:42:33] data/lib/032-position.lua:2: in function 'isInArea' [22/10/2013 05:42:33] data/creaturescripts/scripts/zombie.lua:17: in function <data/creaturescripts/scripts/zombie.lua:15> e tambem os players pode atacar os zombies sendo que ja colocquei no-pvp e no-logout la na area e os zombies atacam os players e eles nao vao pro templo. Eu tentei arrumar isso ai so que so deu em merda. Aki o zombie.lua e aki o 032-position: @------------------------------------Resolvido------------------------------------------ Ja resolvi esse meu problema esta aqui embaixo a soluçao caso alguem esteja com o mesmo problema(e meio improvavel). data/creaturescripts/scripts/onthink.lua data/creaturescripts/scripts/ondeath.lua tags: <event type="think" name="ZombieThink" event="script" value="zombie/onthink.lua"/> <event type="death" name="ZombieDeath" event="script" value="zombie/ondeath.lua"/> e adicione isso no monster zombie event: <script> <event name="ZombieThink"/> <event name="ZombieDeath"/> </script> Acho que e so eu mesmo que tinha esse problema mesmo so muito burro.
    1 ponto
  30. utiliza o meu e vê se dá local ranks = { ['fist'] = {SKILL_FIST}, ['club'] = {SKILL_CLUB}, ['sword'] = {SKILL_SWORD}, ['axe'] = {SKILL_AXE}, ['distance'] = {SKILL_DISTANCE}, ['shield'] = {SKILL_SHIELD}, ['fish'] = {SKILL_FISHING}, ['magic'] = {SKILL__MAGLEVEL}, ['level'] = {SKILL__LEVEL} } function onSay(cid, words, param) local msg = string.lower(param) if ranks[msg] ~= nil then str = getHighscoreString((ranks[msg][1])) else str = getHighscoreString((SKILL__LEVEL)) end doPlayerPopupFYI(cid, str) return TRUE end
    1 ponto
  31. alissonfgp

    Global Server 10.10

    ahh Sei , vai em creaturescripts e remove esse tag <event type="kill" name="task_count" event="script" value="task_count.lua"/>
    1 ponto
  32. rdsrds

    Pokemon [Chasing]

    Viu só amigo,aos poucos vao surgindo as criticas de Lag e etc Claro que 2-3 Criticas nao é nada perto das centenas de players que voce tem,mas é um fato: Servidor easy tem vida curta
    1 ponto
  33. zipter98

    Castle

    Você poderia postar aqui o script que teleporta o player para o castle? Neste, o player recebe um "valor", que, com ele, poderá criar condições (como uma utilizada em meu comentário anterior), até que este valor seja retirado do jogador. Realmente, não sou bom com explicação, tente descobrir qual o código que teleporta (provável) o jogador para o castelo. Para adicionar/registrar esses códigos que passei, faça o seguinte: Vá em data/creaturescripts/scripts, copie e cole um arquivo com extensão .lua qualquer desta pasta, delete todo o conteúdo. Depois, adicione nele o código que passei. Feito isso, vá em data/creaturescripts e abra o arquivo creaturescripts.xml. Nele, você verá várias "tags", como, por exemplo: <event type="look" name="LookSystem" event="script" value="look.lua"/> Neste arquivo, você deve adicionar a seguinte tag: <event type="preparedeath" name="Nome do arquivo (para registrar depois no login.lua)" event="script" value="nome do arquivo.lua criado (como expliquei acima).lua"/> Salve então o arquivo. Após ter criado o arquivo.lua e colocado a tag no creaturescripts.xml, vá em data/creaturescripts/scripts, e abra o arquivo login.lua. Lá, procure pela parte que terá vários semelhantes a esses: registerCreatureEvent(cid, "EffectOnAdvance") registerCreatureEvent(cid, "GeneralConfiguration") registerCreatureEvent(cid, "SaveReportBug") registerCreatureEvent(cid, "LookSystem") Após o último registro de creatureevent, pule uma linha e coloque isso (ou coloque entre eles, isso você decide): registerCreatureEvent(cid, "Nome do arquivo que você colocou na tag em actions.xml") Como eu disse, não sou muito bom em explicações, mas espero que você tenha entendido um pouco sobre o que fazer.
    1 ponto
  34. Lordfireot

    Baiakzik editd 8.60

    Ola galera venho aqui mostrar outro servidor que eu estava terminando ele ai deu uma preguiça de termina faltava pocas coisas algums erros do Executer do baiak eu arrumei outros não conseguo kkkk O que eu fiz no servidor?. Modifiquei o templo. Modifiquei a sala de tps vips. Modifiquei a cidade principal. Retirei vários bugs do mapa. Retirei vários erros no EXE do servidor. Retirei algums comando duplos do servidor. Retirei algums comandos inativos que não prestava para nada. Entre outras coisas. Imagens. Templo Download. Clique aqui Scan. Aqui scan Obrigado galera não tinha muito que fala por que e um baiak normal mais eu editei ele e postei o que eu lembro que eu mechei mais existe mais coisas ainda que eu não disse.
    1 ponto
  35. Bem essa pagina foi feita para mostrar os jogadores que estão usando o training offline! Vá na pasta htdocs crie um arquivo chamado offline.php e cole isso dentro: <?PHP $i = 0; $main_content .= '<h2>Already Training on Denera World!</h2><TABLE border=0 CELLSPACING=1 CELLPADDING=2 WIDTH=100%class="table table-striped"><TR><TD CLASS=white COLSPAN=4>'; $n = $SQL->query('SELECT COUNT(`offlinetraining_skill`) as `count` FROM `players` WHERE `offlinetraining_skill` > 0;')->fetch(); $main_content .= '<div class="alert alert-success">There are '.$n['count'].' players already training on our world!</div></TD></TR><TR><TD WIDTH=30%><B>Name</B></TD><TD WIDTH="10%"><B>Level</B></TD><TD WIDTH="20%"><B>Vocation</B></TD><TD WIDTH="50%"><center><B>Training Type</B></center></TD></TR>'; $list = $SQL->query('SELECT `name`, `level`, `vocation`, `promotion`, `offlinetraining_skill` FROM `players` WHERE `offlinetraining_skill` > 0;')->fetchAll(); foreach($list as $player) { $i++; $main_content.= '<TR><TD WIDTH=30%><A HREF="?subtopic=characters&name='.urlencode($player['name']).'">'.$player['name'].'</A></TD><TD WIDTH=10%>'.$player['level'].'</TD><TD WIDTH=20%>'.$vocation_name[0][$player['promotion']][$player['vocation']].'</TD><TD WIDTH=50%><center>'.$skill_name[0][$player['offlinetraining_skill']].'</center></TD></TR>'; } $main_content .= '</TABLE></td></tr></table>'; ?> Depois proxure o arquivo index.php na ainda na pasta htdocs e cole isso : case "offline"; $topic = "offline"; $subtopic = "offline"; include("offline.php"); break; abaixo disso: case "spells"; $topic = "Spells"; $subtopic = "spells"; include("spells.php"); break; e na pasta layouts/seulayout abra o arquivo layout.php e procure por isso: <a href='?subtopic=highscores'> <div id='submenu_highscores' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_highscores' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Highscores</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> embaixo coloque isso: <a href='?subtopic=offline'> <div id='submenu_highscores' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_offline' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Training Offline</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> o resultado será esse! Em breve estarei estilisando essa pagina! Creditos: Potar, Gpedro e PiabetaMan01 por trazer ao Forum!
    1 ponto
  36. Olá a todos! eu queria saber se alguem ai tem um server PxG ou outro melhor que o PxG, por que eu estou procurando e nunca achei um, por gentileza vocês podem me passar um? quem me ajudar eu eu dou Curtir no tópico!
    1 ponto
  37. Roksas

    Torneio PVP!

    Iaaae galera suave braaits ? Hoje venho trazer para vocês um sistema de Torneio, mas, como funciona? Vários players entram numa sala, falando com o NPC (tem horário configurável para poder falar), e para poder participar deve pagar uma quantia, ao pagar você é teleportado á Arena aonde começa a batalha. O último que sobreviver vence Vamos á instalação? ~~ Vá em data/npc, copie algum arquivo .XML da pasta e cole, renomeie para Tournament, cole isso dentro: Ok, agora vá em data/npc/scripts, copie algum arquivo dessa pasta e cole, renomeie para tournament, cole isso: Configurando: local cfg = { price = 100, -- Money to sign in tournament startPos = {x = 1016, y = 1025, z = 7}, -- Posição central da sala de torneio hour = "18:00:00", -- Hour to start maxhour = "18:15:00" -- Max to start } Price é o preço que paga para entrar no Torneio, startPos é as coordenadas do meio da sala de Torneio, e Hour é a hora do dia que começa, o Torneio no caso é diário, mude o horário de "18:00:00" para o horário desejado, entre aspas e no formato 00:00:00! Já o maxhour determina até quando o NPC vende inscrições, no caso coloquei por 15 minutos. ​ Agora vamos configurar a alavanca e o baú do vencedor! Vá em data/lib, abra o arquivo 050-function.lua ou function.lua, vá até a última linha de todas, pule 2 linhas e cole isso: Essa é a lib que usaremos no nosso Torneio, muito bem, agora vá em data/actions/scripts, copie algum arquivo desta pasta e cole, renomeie para tournament e cole isso dentro: Configurando: local cfg = { salaAward = {x = 1016, y = 1014 , z = 7}, -- Coordenates of the award place } salaAward, coloque as coordenadas da sala de prêmio do vencedor do Torneio! local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7} fromx - fromy - fromz, coloque as coordenadas (X,Y e Z) do canto superior esquerdo da sala de Torneio, e tox - toy - toz, coloque as coordenadas (X, Y e Z) do canto inferior direito da sala de Torneio. local maxhour = "18:15:00", coloque igual ao script do NPC! Na mesma pasta crie outro arquivo, mas agora com o nome de tournamentchest e adicione isso dentro: ​Configurando: local cfg = { awardId = 2148, -- Item ID of winner prize awardAmount = 100, -- Amount of item ID } awardId coloque o ID do item que vai receber ao ganhar o Torneio, e awardAmount a quantidade! Em actions.xml adicione essas tags: <action actionid="13549" event="script" value="tournament.lua"/> <action uniqueid="5531" event="script" value="tournamentchest.lua"/> Muito bem, dirija-se á data/creaturescripts/scripts, copie algum arquivo da pasta e cole, renomeie para tournamentdeath, e adicione isso dentro: ​Configurando: ​ local cfg = { leftPos = {x = 1008, y = 1018, z = 7}, rightPos = {x = 1025, y = 1033, z = 7}, } leftPos coloque as coordenadas do canto superior esquerdo da Sala de Torneio, e rightPos coloque o canto inferior direito da sala Agora em creaturescripts.xml adicione essa tag: <event type="preparedeath" name="TournamentDeath" event="script" value="tournamentdeath.lua"/> Prontinho galera, agora apenas adicione ACTION ID 13549 na alavanca e UNIQUE ID 5531 no baú do campeão Download Mapa Tournament (Tibia) - 4shared
    1 ponto
  38. Acredito que funcione do 7.1 até a versão atual do Tibia. Talvez o problema seja na hora de compilar. Cada versão nova do Tibia a signiture( assinatura, um id que existe no dat e no spr ) geralmente muda. Então ele não vai compilar com a signiture da versão 7.81, por exemplo. Caso alguém saiba a signiture dessa versão, é só ir no version.ini, copiar o conteudo do 8.54 mudar o nome pra 7.81 e colocar signiture do 7.81 e a compilação vai funfar perfeitamente. a estrutura do version.ini é a seguinte: [8.50 rev1] signiture=4A44FD4E twobytes = 1 Cada versão tem uma configuração dessa. Entre as chaves a versão, signiture é a assinatura, e twobytes é relativo ao numero de sprites da versão. do 7.1 até o 9.5 é twobytes =1, a partir do 9.60 é twobytes=0.
    1 ponto
  39. Em data/npc crie um arquivo.xml nomeie para newvoc e adicione: Em data/npc/scripts crie um arquivo.lua nomeie para newvoc e adicione: Editando: -Roxo: Looktype -Verde escuro: Mensagem após falar hi -Dourado: Mensagem que o player precisara dizer para o npc continuar ​-Vermelho: Próxima mensagem do npc ​-Verde claro: Próxima mensagem do player -Marrom: Id do item a ser removido -Violeta: Quantidade do item a ser removido -Cinza: Id da vocação -Azul Turco: Mensagem de confirmação -Teal: Mensagem de cancelamento
    1 ponto
  40. VictorWEBMaster

    [GESIOR] VictorWEBMaster 2019v

    Testei em servidor 9.54 e funcionou perfeitamente, apenas as imagens e os monstros não tive tempo de dar update, mas aqui funcionou perfeitamente.
    1 ponto
  41. SSs Postadas.
    1 ponto
  42. tenho aqui prontinho que tu quer e até melhor olha só: Vai em data/talkactions/scritps e duplica 3 arquivos, um renomeia para "addpremium", outro para "premiumcheck" e o ultimo "removepremium" todos sem as aspas. Agora no arquivo "addpremium" cole isso: function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local t = string.explode(param, ",") local player = getPlayerByNameWildcard(tostring(t[1])) if(not isPlayer(player)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player nao existe.") return true end local pos = getCreaturePosition(player) local effect = 30 local days = tonumber(t[2]) doPlayerAddPremiumDays(player, days) doSendMagicEffect(pos, effect) return true end No arquivo "premiumcheck" cole isso: function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local player = getPlayerByNameWildcard(tostring(param)) if(not isPlayer(player)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player nao existe.") return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param.." possui "..getPlayerPremiumDays(player).." dias de premium restantes.") return true end E no arquivo "removepremium" cole isso: function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local t = string.explode(param, ",") local player = getPlayerByNameWildcard(tostring(t[1])) if(not isPlayer(player)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player nao existe.") return true end local pos = getCreaturePosition(player) local effect = 30 local days = tonumber(t[2]) doPlayerRemovePremiumDays(player, days) doSendMagicEffect(pos, effect) return true end E por último vai em data/talkactions/talkactions.xml e cole as tags: <talkaction words="/addpacc" access="6" event="script" value="addpremium.lua"/> <talkaction words="/premiumcheck" access="6" event="script" value="premiumcheck.lua"/> <talkaction words="/removepremium" access="6" event="script" value="removepremium.lua"/>
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...