Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/02/15 em todas áreas

  1. Bruno

    xMapShape v1.0.1

    Introdução O projeto foi iniciado por @Daniel para manter atualizado um recurso antigo que é muito utilizado, além de ser útil e criativo: o Bit Map To Map; baseando-se em sua estrutura, desenvolvemos um novo Map Shape, o xMapShape; Esperamos pedidos de novas atualizações e opiniões sobre o projeto. Funções O xMapShape apresenta algumas funções a mais, tudo está sendo planejado para uma praticidade que envolva estética e funcionalidade: Você adiciona uma imagem, seleciona uma cor, essa cor selecionada será transformada em Mapa; você pode escolher várias cores e alguns grounds, assim como a versão que desejar. Também alterei a estrutura do programa ao salvar o arquivo, pra quem reclamava, agora está perfeito! Funções alteradas como a seleção de cor possibilitam um melhor manuseamento da ferramenta, o que antes produzia cor1 e cor2 agora pode ser listado como quantas cores você desejar. Como usar? Veja o tutorial Download MediaFire Scan Requerimentos .NET Framework 3.5 ou superior Changelog [02/06/2015] v1.0.1: - Removida restrições de importação [01/06/2015] v1.0.0: - Lançamento do xMapShape Créditos Bruno Minervino Daniel DarkstaR
    5 pontos
  2. O rendimento do fórum está baixo, não há tantas pessoas postando como antes. Acho que para vocês mudarem esse quadro, seria procurar meios de incentivar os membros à postarem. Minha sugestão é a seguinte: Vocês criarem o membro do mês ou da semana. "Mas o que seria isso?" Há um hook para Invision Power Board (plataforma do xTibia), em que deixa dessa forma destacada: (Member of the month) No caso, vocês colocariam isso e o seguinte: O membro que postasse mais durante a semana ou durante o mês, ganharia destaque na index do fórum (assim como mostra o exemplo da imagem), um rank especial justamente pra isso e X pontos de reputação como recompensa. PORÉM, para evitar confusões, os tópicos seriam avaliados de acordo com as regras, e seriam contados OS TÓPICOS e não os POSTS da pessoa. Acho que isso seria um método de incentivar o pessoal à trazer o conteúdo ao fórum e até mesmo de trazer mais membros. Beijos.
    3 pontos
  3. Novo Sistema de Cargos! Como sabem, nosso sistema hierárquico é composto por Estagiários e Moderadores. Acrescentamos o cargo Coordenador com o objetivo de ajudar a manter a ordem dessa hierarquia. O cargo não está em uso no momento mas já pode ser visualizado. O update dessa semana consiste em novas pips para a galera! É isso mesmo, depois de tanto tempo finalmente trocamos as pips. As pips para membros serão implementadas na próxima semana. O que é o sistema de sub-cargos e evolução? O sistema de sub-cargos se resume em divisões onde o membro passa por um processo evolutivo em que será avaliado por um superior. Há cinco níveis de avaliação, ela é dada pelo tempo no cargo e pela determinação. Ao ser aceito na equipe, o membro recebe uma pip. Esta pip irá evoluir após um tempo determinado para uma pip superior, esta, significará que o membro está se determinando para com o fórum. Há fatos que indicam que o método de avaliação (tempo), é invalido para o cargo; nesse sentido, o avanço da pip é dado com o tempo + avaliação da equipe. Em resumo, um membro pode repetir o nível do cargo. Ao alcançar o nível superior do cargo, a equipe realiza uma reunião para decidir se o membro é promovido. CARGO TEMPO NÍVEL Estagiário 1 semanas >1 Estagiário 3 semanas >2 Estagiário 4 semanas >3 Estagiário 6 semanas >4 Estagiário 8 semanas >5 Herói Prévia de ranks para membros (Será adicionado no próximo update) (...) Extra - Separadores de tópico xTibia ATUALIZAÇÕES: - Concertado bug dos icons de mensagem e notificação que ficavam irregulares somente na index; - Nova cor de fonte (links) no fórum; - Concertado bug de irregularidade na descrição do search; - Painel de informação de usuário reformulado; - Removido bug que alterava o layout da página ao adicionar textos maiores que o UIP; - Reformulação de botões (para staff);
    2 pontos
  4. ^ http://www.xtibia.com/forum/topic/225014-queries-e-sql-para-otservers/
    2 pontos
  5. adc na sua lib function getRankStorage(cid, value, max, RankName) -- by vodka local str ="" str = "--[".. (RankName == nil and "RANK STORAGE" or ""..RankName.."") .."]--\n\n" local query = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..value.." ORDER BY cast(value as INTEGER) DESC;") if (query:getID() ~= -1) then k = 1 repeat if k > max then break end str = str .. "\n " .. k .. ". "..getPlayerNameByGUID(query:getDataString("player_id")).." - [" .. query:getDataInt("value") .. "]" k = k + 1 until not query:next() end return doShowTextDialog(cid, 2529, str) end dps só usar assim em uma talk: getRankStorage(cid, 543995, 10, "Rank Boss")
    2 pontos
  6. Bruno

    Incentivar os membros à postarem

    Eu acho que para determinar o "membro do mês" não seria só postagens de conteúdo... Para ser o membro do mês, além de postar conteúdo o membro precisaria ajudar outros membros e ser pró-ativo em suas postagens, se não vamos ter muito conteúdo sem suporte, conteúdo abandonado e etc.
    2 pontos
  7. Administrador

    Regras xTibia.com

    1 - Regras Gerais 1.1 - A partir do momento do registro, fica entendido que as regras foram lidas e aceitas. Qualquer ato dentro do xTibia está sujeito às regras subsequentes e à decisão da equipe do xTibia. 1.2 - O xTibia não se responsabiliza por nenhum conteúdo contido no fórum. O conteúdo é de responsabilidade do membro que o postou. Assim sendo, a equipe não tem a obrigação de modificar ou remover qualquer conteúdo publicado, sendo de sua total responsabilidade fazê-lo. 1.3 - O conteúdo do xTibia deve respeitar à legislação brasileira. Caso deseje ver as regras específicas para o conteúdo. 1.4 - A equipe do xTibia se reserva ao direito de modificar qualquer mensagem para que ela se adeque às regras do fórum e aos nossos padrões e requisitos. 1.5 - A administração pode modificar a estrutura do fórum e tomar medidas drásticas quando isso se fizer necessário, visando manter o bom funcionamento do fórum. 1.6- Situações que não estejam previstas nas regras mas que podem gerar conflitos serão observadas pela equipe. Caso seja julgado que, visando o bem de todos, alguma ação seja necessária, esta será tomada e a equipe se reserva ao direito total de fazê-la. Posteriormente, se for necessário, as regras serão modificadas. 2 - Conteúdo 2.1 - É expressamente proibido conteúdo relacionado a pirataria (warez) , pornografia ou erotismo e apologia. 2.2 - É expressamente proibida a divulgação de informações sigilosas ou pessoais, como conversas em mensageiros instantâneos (messenger, whatsapp, etc). 2.3 - É expressamente proibida a divulgação de sites relacionados a PTC (Pay to Click); lembre-se que aqui é um fórum de Tibia e OTserv e nos reservamos no direito de remover o conteúdo inclusive nas áreas OFF-Topic. 2.4 - Não é permitida a postagem do e-mail pessoal como forma de receber ou oferecer qualquer tipo de ajuda. O fórum foi feito para intermediar a comunicação entre os membros. 2.5 - Não é permitido comercio ou nenhuma postagem relacionada a vendas. 2.6 - É expressamente proibida a postagem de conteúdo pago de qualquer forma, por exemplo exigindo pontos de reputação ou votos em outro site. 2.7 - É proibido pedir pontos de reputação (likes) em troca de qualquer atividade dentro do fórum. 2.8 - É proibido ofender, insultar, provocar ou ameaçar um membro ou conteúdo, bem como é preferível evitar o uso de palavras de baixo calão. O membro que se sentir ofendido deve reportar a mensagem. 2.9 - Mensagens duplicadas terão suas cópias fechadas e excluídas, bem como mensagens em seções incorretas serão movidas para a seção correta. 2.10 - O título de um tópico deve conter uma breve descrição ou explicar o assunto do mesmo. Sendo assim, é expressamente proibido tópicos com títulos como "Socorro!!!" ou "Ajuda aqui plx". 2.11 - Ao postar informações ou conteúdo provenientes de outro site, é obrigatória a indicação da fonte do mesmo, seja escrevendo o nome do autor ou colocando um link para o conteúdo original de forma visível. O não cumprimento dessa regra caracteriza plágio (ou ripping). 2.12 - Mensagens não relacionadas ao assunto serão excluídas. 2.13 - São proibidos anúncios de sites concorrentes (sites com o mesmo objetivo do xTibia, ou seja, Tibia e OTserv). As regras se aplicam tanto à mensagens de texto corrido, quanto a imagens e qualquer outro tipo de mídia que possa ser usado em uma mensagem. 2.14 - É proibido a divulgação/citação de empresas que ofereçam serviços de hospedagem para OTServer. 3 - Uso do Fórum 3.1 - O membro que usar o fórum de forma abusiva sem trazer conteúdo ou ajudar perde o direito de criticar. Uma crítica só é considerada válida caso o membro esteja contribuindo com o fórum. 3.2 - As mensagens não devem sair dos padrões de postagem. Evite usar letras exageradamente grandes, com muitas formatações ou coloridas se não visando chamar atenção para a informação ali contida. 3.3 - Discussões que se tornarem pessoais em que os membros tomem comportamentos destrutivos serão barradas e os membros devidamente punidos. 3.4 - O fórum não é um bate-papo. Tópicos que se transformarem em conversas pessoais em seções inapropriadas para isso (seções técnicas) serão fechados e posteriormente apagados. 3.5 - Caso não concorde com a decisão de algum membro da equipe, encaminhe uma mensagem pessoal para um superior ou responsável do fórum. 3.6 - Um membro tem direito de ter uma conta, e não mais que isso. Do mesmo jeito, uma conta deve ter apenas um dono. 3.7 - A criação de múltiplas contas para se beneficiar é expressamente proibida, e caso seja descoberto ambas as contas serão severamente punidas. 3.8 - Um membro que foi banido pode voltar a ter sua conta ou usar o fórum caso a coordenação concorde em lhe dar uma nova chance, desde que o membro prove que merece. 3.9 - Todo o conteúdo postado tem o endereço IP do membro guardadas por questões de segurança. Este endereço tem acesso restrito apenas da coordenação do fórum caso seja necessária sua verificação. 3.10 - Uma conta suspensa tem novamente o direito de postar quando sua suspensão for encerrada. 3.11 - Não é possível cancelar ou excluir uma conta de membro a partir do momento em que ela é registrada. O nome visível (ou nick) de uma conta só pode ser alterado caso haja um motivo. 3.12 - O xTibia permite a edição livre do perfil do membro. No entanto, não nos responsabilizamos por nada que é informado no perfil, portanto, tome severos cuidados com informações pessoais. 3.13 - O membro não deve usar nenhuma imagem no seu avatar que transpasse às regras de conteúdo do fórum. 3.14 - O membro não deve usar nenhuma imagem ou texto na sua assinatura que transpasse às regras de conteúdo do fórum. 3.15 - O membro que de forma proposital altere o andamento do fórum, postando mensagens ou scripts que atrapalhem a navegação, desordenem o fórum ou invadam a privacidade serão suspensos ou banidos imediatamente. O descumprimento de qualquer regra é passível de aviso, alerta, suspensão ou banimento de acordo com a gravidade e a situação do membro. As regras podem ser modificadas a qualquer momento sem aviso prévio.
    2 pontos
  8. Bruno

    xMapShape v1.0.1

    v1.0.1 Foram removidas as restrições de importação, agora não tem limite de tamanho ou de bites para importar imagens.
    2 pontos
  9. Lordbaxx

    [Pokemon] Catch System Por Skill

    Hoje irei postar um Script de Catch Por Skill Configurado No "Sword Fighting" do Seu OLDC/OTC, por NextBr vamos lá: Resumo: Quanto Maior o Skill "Catching" Maior a chance de Captura do Pokemon! OBS: Eu nao Vou Postar o Script Completo Pois de Cada (PDA) ou (PDA - COM PokeLevel) é Diferente um do Outro, Eu So vou Ensinar a Voces a como Adicionar o Sistema em Seus Servidores! Testado em: - Pokemon Dash Advanced - Não é difícil adaptar para outros servidores. Primeiro Vai em Data/Lib/catchsystem.lua e Procure por essa Funçao: Na Parte aonde manda a MSG de que Voce "capturou um Pokemon" e "Capturou um Pokemon e Foi para o CP" add Isso Abaixo dessas Msg: - Resumo: doPlayerAddSkillTry(cid,2,10) --- Quando Capturar um Pokemon vai Ganhar 10% de Skill "2". - Obs: No meu Client o Skill Catching Esta no Skill "Sword Fighting" Bom logo após você vai em data/actions/catch.lua e no começo do Script adiciona isto: Agora Procure essa Funçao: local catchinfo = {} E Troca por Isso: -OBS: O Script é Bem Basico. Dar Para adicionar varios Coisas Como (Ganhar EXP Dependendo do Skill/Almentar Chance de Catch para Premium Account e etc...) Imagens: OBS: Só vai ganhar Skill se você Capturar o Pokemon e Recomendo á vocês Deixar o catch BAIXO! Por que o script faz a soma de rate um Exemplo: Pokeball Rate: 50 Skill Cathing Rate (com 25 de Skill Cathing) : 100 Somar: 50+100 = 150 de Rate o Jogador vai ter [script Atualizado Dia 25/01/2015] [+] Creditos: NextBR
    1 ponto
  10. 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
    1 ponto
  11. Bom, fiz o ditto memory similiar ao da pxg, e gostaria de mostrar. ps: Não vejam em fullscreen. Agora tá quase, tá assim:
    1 ponto
  12. Animal Pak

    Cantebia

    Informações: Download: http://www71.zippyshare.com/v/hKqDtDay/file.html Scan: https://www.virustotal.com/pt/file/edc8ac0829f0cf39eac29fe8b1c704b8e4a1e66e835d896694a003b7c035db25/analysis/1427935285/ Créditos: Cantebia Team
    1 ponto
  13. larissaots

    Dúvida e sugestão: tópicos antigos

    Olá, boa noite! Gente, estava olhando a área de suporte dos scripts e, jesus, está uma confusão lá kkkkkk Minha dúvida é a seguinte: Não teria como vocês através de multimoderação (não sei se usam aqui), mover todos os tópicos sem respostas há um bom tempo? Sugestão: Teria como adicionar uma regra em que tópicos com até x dias sem respostas (sem respostas digo... que o autor do tópico não se pronunciou mais sobre) seria considerado como resolvido, fechado e movido à área de tópicos resolvidos? Porque dessa forma ficaria mais organizado, tem tópicos de 2012, 2011 lá... E há algumas regras que as imagens estão off, não teria como atualizá-las? Obrigada.
    1 ponto
  14. Ficaram lindas as pips e achei bem interessante o sistema de evolução dos cargos. É um incentivo a mais pra galera da equipe trabalhar e ter seu reconhecimento no fórum. Por mais simples que possa parecer, tem um efeito bem positivo!
    1 ponto
  15. Dare Devil

    xTibia, o RETORNO!

    O que é isso... EksTibia de volta??? Parabéns aos envolvidos no retorno deste grandioso projeto, desejo à vocês uma boa sorte!!! Quem sabe um dia penso em retornar a equipe!!! Att. ~DD
    1 ponto
  16. Gostei bastante das novas pips, e do novo sistema de evolução da mesma. ~~~~Hail xTibia~~~~
    1 ponto
  17. Benny

    [Pedidos] ~ Beeny

    Sejam mais originais =P
    1 ponto
  18. Benny

    [Showoff] Pokémon Brasil

    Não curti esses efeitos não, boy Tenta colocar um bg com uma textura de pokémon e tal Um bagulho tipo assim
    1 ponto
  19. Benny

    Galeria • Beeny

    Mó tempão que eu não passo por aqui HEUAHEU Tava testando uns efeitos/texturas/c4ds Aí saiu isso Sim, tá saturado pra porra Sim, tá com brilho pra porra² Mas é só pra atualizar a galeria msm c:
    1 ponto
  20. MuriloCavalcantti

    [Showoff] Pokémon Brasil

    Sim Avu, porém como eu disse, estou procurando uma forma de tematizar, aceito opiniões especialmente vindo de você, abraços. Obrigado Dead pelo elogio. Sim, como eu disse acima, estarei procurando uma forma concreta de tematizar. Atualizando, ainda não está bom, não achei uma forma concreta de tematizar.
    1 ponto
  21. Bruno

    Scroll

    @@ScythePhantom, Tente assim: local config = { storage = 10520, -- use uma storage não utilizada tempo = 5, -- em minutos remItem = false -- remove item ao usar } function onUse(cid, item) if getPlayerSkullType(cid) == SKULL_WHITE or isPlayerPzLocked(cid) then return false, doPlayerSendCancel(cid, "Voce nao pode usar o teleport estando pk ou pz lock.") end local pos, temple = getCreaturePosition(cid), getTownTemplePosition(getPlayerTown(cid), false) if getPlayerStorageValue(cid, config.storage) < os.time () then doTeleportThing(cid, temple, true) setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo * 60)) doSendMagicEffect(pos, CONST_ME_TELEPORT) doSendMagicEffect(getClosestFreeTile(cid, temple), CONST_ME_POFF) if config.remItem then doPlayerRemoveItem(cid, item.itemid, 1) end else return false, doPlayerSendCancel(cid, "Voce so pode usar o teleport a cada " .. (config.tempo / 60) .. " minutos.") end end
    1 ponto
  22. function onSay(player, words, param) if player:getAccountType() <= ACCOUNT_TYPE_TUTOR then return true end local v = param:split(",") if #v ~= 2 then player:sendCancelMessage("Insufficient parameters.") return false end local item, count = v[1], v[2] for _, pid in pairs(Game.getPlayers()) do pid:addItem(tonumber(item), tonumber(count)) end broadcastMessage("A equipe acaba de mandar um presente para todos os player online!", MESSAGE_STATUS_WARNING) return false end
    1 ponto
  23. Créditos à zipter98. Objetivo Quando X item cair do loot de algum monstro, irá aparecer uma backpack ou bag (a que você preferir) e nela estará o item que você configurou no script. Isso é bom para deixar separados dos itens "sem valor", pois, você vai saber quando realmente cair um item valioso, porque irá aparecer a backpack/bag. É um script diferente que pode chamar a atenção dos players. Tutorial Vá até as pastas data/creaturescripts/scripts, crie o arquivo aparecerbag.lua e coloque: local bag = xxx -- ID da bag ou backpack local itens = {xxx, xxx, xxx} -- ID dos itens que serão colocados dentro da bag, caso dropados. function Loot(mName, mPosition) local items = {} for i = getTileInfo(mPosition).items, 1, -1 do mPosition.stackpos = i table.insert(items, getThingFromPos(mPosition)) end if #items == 0 then return true end local corpse = -1 for _, item in ipairs(items) do local name = getItemName(item.uid):lower() if name:find(mName:lower()) then corpse = item.uid break end end if not isContainer(corpse) then return true end if corpse == -1 then return true end for i = 0, getContainerSize(corpse) - 1 do local item = getContainerItem(corpse, i) if isInArray(itens, item.itemid) then doAddContainerItem(doAddContainerItem(corpse, bag, 1), item.itemid, item.type) doRemoveItem(item.uid) end end end function onKill(cid, target) if isMonster(target) then addEvent(Loot, 5, getCreatureName(target), getThingPos(target)) end return true end function onLogin(cid) registerCreatureEvent(cid, "lootItem") return true end Após isso vá em data/creaturescripts/ e abra o arquivo creaturescripts.xml. Adicione: <event type="login" name="lootLogin" event="script" value="aparecerbag.lua"/> <event type="kill" name="lootItem" script="aparecerbag.lua"/>
    1 ponto
  24. Bruno

    Npc Bugado

    Tenta assim: local tab = { aposta1 = {10000, 20000}, -- apostaN = {custo, premio}, aposta2 = {100000, 2000000}, aposta3 = {1000000, 2000000} } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end function thinkCallback(cid) local rand = math.random(1,100) if rand == 1 then selfSay('Oi! Ganhe dinheiro com sua sorte!') end if rand == 2 then selfSay ('Só entendo português, diga oi.') end if rand == 3 then selfSay ('Posso te ajudar?') end return true end function greetCallback(cid) return true end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'jogar')) then selfSay('O jogo é bem simples, você só precisa decidir se quer apostar 1 crystal coin, 10 crystal coins ou 100 crystal coins. Após decidir sua aposta, será sorteado um número entre 1 e 10 para mim e para você, vence quem sortear o maior número. Se der empate, você recebe o dinheiro da aposta de volta, se você ganhar receberá o dobro do valor da aposta e se perder eu fico com o seu dinheiro da aposta. Diga {1 crystal coin}, {10 crystal coins} ou {100 crystal coins} para começar o jogo.', cid) talkState[talkUser] = 1 elseif(msgcontains(msg, '1 crystal coin') and talkState[talkUser] == 1) then selfSay('Você tem certeza que quer apostar 1 crystal coin?', cid) talkState[talkUser] = 2 elseif(msgcontains(msg, '10 crystal coins') and talkState[talkUser] == 1) then selfSay('Você tem certeza que quer apostar 1 crystal coin?', cid) talkState[talkUser] = 3 elseif(msgcontains(msg, '100 crystal coins') and talkState[talkUser] == 1) then selfSay('Você tem certeza que quer apostar 1 crystal coin?', cid) talkState[talkUser] = 4 elseif(msgcontains(msg, 'sim') and talkState[talkUser] == 2) then if doPlayerRemoveMoney(cid, tab.aposta1[1]) then local playerNumber = math.random(1, 10) local npcNumber = math.random(1, 10) if playerNumber < npcNumber then selfSay('Seu número: '.. playerNumber ..'.\nMeu número: '.. npcNumber ..'.\nVocê Perdeu! Vamos {jogar} novamente?',cid) talkState[talkUser] = 0 elseif playerNumber == npcNumber then selfSay('Seu número: '.. playerNumber ..'.\nMeu número: '.. npcNumber ..'.\nDeu Empate! Vamos {jogar} novamente?',cid) talkState[talkUser] = 0 elseif playerNumber > npcNumber then selfSay('Seu número: '.. playerNumber ..'.\nMeu número: '.. npcNumber ..'.\nVocê Venceu! Hoje é seu dia de sorte, vamos {jogar} novamente?',cid) doPlayerAddMoney(cid, tab.aposta1[2]) talkState[talkUser] = 0 end else selfSay('Desculpe, mas você não possui dinheiro para esta aposta',cid) end elseif(msgcontains(msg, 'sim') and talkState[talkUser] == 3) then if doPlayerRemoveMoney(cid, tab.aposta2[1]) then local playerNumber = math.random(1, 10) local npcNumber = math.random(1, 10) if playerNumber < npcNumber then selfSay('Seu número: '.. playerNumber ..'.\nMeu número: '.. npcNumber ..'.\nVocê Perdeu! Vamos {jogar} novamente?',cid) talkState[talkUser] = 0 elseif playerNumber == npcNumber then selfSay('Seu número: '.. playerNumber ..'.\nMeu número: '.. npcNumber ..'.\nDeu Empate! Vamos {jogar} novamente?',cid) talkState[talkUser] = 0 elseif playerNumber > npcNumber then selfSay('Seu número: '.. playerNumber ..'.\nMeu número: '.. npcNumber ..'.\nVocê Venceu! Hoje é seu dia de sorte, vamos {jogar} novamente?',cid) doPlayerAddMoney(cid, tab.aposta2[2]) talkState[talkUser] = 0 end else selfSay('Desculpe, mas você não possui dinheiro para esta aposta',cid) end elseif(msgcontains(msg, 'sim') and talkState[talkUser] == 4) then if doPlayerRemoveMoney(cid, tab.aposta3[1]) then local playerNumber = math.random(1, 10) local npcNumber = math.random(1, 10) if playerNumber < npcNumber then selfSay('Seu número: '.. playerNumber ..'.\nMeu número: '.. npcNumber ..'.\nVocê Perdeu! Mas não desanime, vamos {jogar} novamente?',cid) talkState[talkUser] = 0 elseif playerNumber == npcNumber then selfSay('Seu número: '.. playerNumber ..'.\nMeu número: '.. npcNumber ..'.\nDeu Empate! Vamos {jogar} novamente?',cid) talkState[talkUser] = 0 elseif playerNumber > npcNumber then selfSay('Seu número: '.. playerNumber ..'.\nMeu número: '.. npcNumber ..'.\nVocê Venceu! Hoje é seu dia de sorte, vamos {jogar} novamente?',cid) doPlayerAddMoney(cid, tab.aposta3[2]) talkState[talkUser] = 0 end else selfSay('Desculpe, mas você não possui dinheiro para esta aposta',cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
    1 ponto
  25. Bruno

    xMapShape v1.0.1

    Vlw meu querido Nah!
    1 ponto
  26. Bruno

    xMapShape v1.0.1

    É uma boa ideia, mas isso não seria bom ao fórum, já que o programa em si leva o nome dele, independente de onde foi postado. Obrigado pela sugestão. Obrigado Lordbaxx
    1 ponto
  27. Preciso estudar essas query pra conseguir fazer isso também. Tópico movido para a seção de dúvidas e pedidos resolvidos.
    1 ponto
  28. Furabio

    Dúvida e sugestão: tópicos antigos

    Sim as vezes eu fico olhando tópico por tópico, porque tem muitos que nem dizem se funcionou ou não, ai como alguns tópico eu já tenho noção que vai funcionar o que o cara disse, eu marco a reposta com a solução e movo para pedidos e dúvidas resolvido, porque senão vira um anarquia.
    1 ponto
  29. Estamos preparando mais formas de incentivar a galera, em breve estará disponível. Vou analisar sua sugestão.
    1 ponto
  30. beto06

    [Show Off] Beto

    Decidi fazer algo http://3.1m.yt/6FhRU0GC.png
    1 ponto
  31. Parabéns pelo tutorial Daniel
    1 ponto
  32. cara to sem o tibia mc pra testa mais acredito que seja algo simples fiz esse testa ai local matar = { red = {2160,1}, -- coloca id do item e quantos ganhar pk = {2160,1}, -- coloca id do item e quantos ganhar } function onKill(cid, target, lastHit) if getCreatureSkullType(target) == SKULL_WHITE then doPlayerAddItem(cid,matar.pk[1],matar.pk[2]) elseif getCreatureSkullType(target) == SKULL_RED then doPlayerAddItem(cid,matar.red[1],matar.red[2]) end return true end TAG <event type="kill" name="nomearquivo" event="script" value="nomearquivo.lua"/> adiciona isso no login registerCreatureEvent(cid, "nomearquivo")
    1 ponto
  33. Muito bom! Ferramenta muito útil e simples de usar.
    1 ponto
  34. Resolvido por MP ~~ Script: local msg = [[ 20 Devoted Token (Tier 1-2) ]] local itens = { {2160, 15}, {2158, 10}, {2157, 2}, } local a = { ITEM = {2145, 10}, -- ITEM, QUANTIDADE } function onUse(cid, item, topos, item2, frompos) doPlayerPopupFYI(cid, msg) if getPlayerItemCount(cid, a.ITEM[1]) >= a.ITEM[2] then local item = itens[math.random(1,#itens)] doPlayerAddItem(cid, item[1], item[2]) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu um item raro!") doSendMagicEffect(getCreaturePosition(cid), 28) doPlayerRemoveItem(cid, a.ITEM[1], a.ITEM[2]) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "você não tem todos itens necessaríos que eu pedi, volte aqui quando tive-los todos!") end return TRUE end
    1 ponto
  35. É só baixar esse tfs 0.4 já com war system, Anti divulgação etc https://www.sendspace.com/file/kcsite e colocar ele dentro da pasta do ot e abrir o servidor com ele.
    1 ponto
  36. ^ Ta ai um tema que rolaria horas de conversa comigo eheuh
    1 ponto
  37. Furabio

    promotion

    Troca seu item por esse : function onUse(cid, item, fromPosition, itemEx, toPosition) local days = 30 -- dias que serão adicionados local daysvalue = days * 24 * 60 * 60 local storageplayer = getPlayerStorageValue(cid, 13540) local timenow = os.time() if getPlayerStorageValue(cid, 13540) - timenow <= 0 then time = timenow + daysvalue else time = storageplayer + daysvalue end if getPlayerVocation(cid) > 4 then doPlayerSetVocation(cid, getPlayerVocation(cid) + 4) end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.") setPlayerStorageValue(cid, 13540, time) local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60)) doSendMagicEffect(getPlayerPosition(cid), math.random(28,30)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.") doRemoveItem(item.uid, 1) return true end e cria um creature scripts, a tag se faz ai é login(pra remover a vocation quando acabar o vip) : function onLogin(cid) if getPlayerStorageValue(cid, 13540) - os.time() <= 0 and getPlayerVocation(cid) > 8 then doPlayerSetVocation(cid, getPlayerVocation(cid) - 4) end return true end
    1 ponto
  38. Desculpa, foi o sono, foi testado no TFS 0.4, 0.3 e 0.6. Certo, caso consiga, eu altero o post e coloco seus créditos. Beijos.
    1 ponto
  39. gabrielbsales

    Pergunta premiada

    Bom, estava sem o que fazer, e fiz esse simples script de "pergunta premiada". Como funciona? Um membro da staff faz uma pergunta com um comando, e então, o primeiro player a responder corretamente, recebe o prêmio definido. Imagens: Bom, vamos ao que interessa. 1º - Na pasta data/talkactions/script/, crie um arquivo chamado question.lua, e nele coloque: 2º - No arquivo data/talkactions/talkactions.xml, adicione as seguintes tags: Lembrando: Espero que seja útil. Créditos: Featzen
    1 ponto
  40. Nesse tutorial vou ensinar como diminuir o delay (tempo de resposta) do teclado, isso ajuda as pessoas que andam pelas setas do teclado! Para isso nós iremos abrir o nosso registro do windows, vai no menu iniciar e na barra de pesquisa digite regedit e de um enter para abrir o editor de registro do windows, em seguida siga o caminho da imagem abaixo e altere o valor para como está na imagem! Para mudar um valor basta dar dois cliques no parametro a ser mudado! Créditos: Daniel pela base do conteúdo!
    1 ponto
  41. "Queremos seu dinheiro ;)" Estou disponibilizando este layout, podemos dizer "copiado" da PokeXGames. Logo vou dizendo que não haverá edição para diferenciar o mesmo do atual. O site da mesma não é muito bom elaborado, mais trago porque não encontrei nenhum, é talvez alguém quer usar. [DOWNLOAD] PokeXCasH [NOVA] VERSÃO 2.0 Print 1 | Live Demo | Download: Mega | Vírus Total VERSÃO 1.1 Print 1 | Print 2 | Download: Mega | Virus Total [TUTORIAIS] - Editar o Logo: Para editar o logo você deve ter o Adobe Photoshop em sua maquina. O PSD esta localizado em arquivos, apenas abra ele com o Photoshop. Lembrando que para editar o logo é necessário ter a fonte instalada que vem junto no diretório. Logo aberto a imagem clique sobre "Ferramenta de Texto" e clique sobre o nome PokeXCash, edite "PokeXCash" pelo nome do seu servidor e de CTRL + S e salve no diretório do layout do pokexcash/img com o nome de logo.png O formato salvo deve ser em .png [ATENÇÃO] Esta é uma versão simples do layout! Não espere futuras atualizações do mesmo, isto farei quando tiver tempo. O layout não tem alguns links, cabe a você aprender a edita-la! Se tiver dúvidas pode comentar no tópico. Você tem um Feedback para o layout? Só comentar no tópico. [CRÉDITOS] PokeXGames pela criação do layout/imagens. LekoDS pela edição da conversão do CSS/HTML para Modern Lembrando que: Se você for postar em outra comunidade lembre-se de postar os devidos créditos do criador, os meus é colocar o link do meu perfil do XTibia!
    1 ponto
  42. Vodkart

    Aol Infinito

    ok vá até data\creaturescripts\scripts e crie um arquivo.lua e renomeie para aolinfinity.lua dentro coloque: function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isPlayer(cid) == true then if (getPlayerSlotItem(cid, 2).itemid == 2173) then doCreatureSetDropLoot(cid, false) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) return TRUE end end return TRUE end em data\creaturescripts\scripts\login.lua adiciona a linha: registerCreatureEvent(cid, "onPrepareDeathinifi") creaturescripts.xml adicione: <event type="preparedeath" name="onPrepareDeathinifi" event="script" value="aolinfinity.lua"/>
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...