Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Boa noite!

 

Trago ao fórum um simples porém útil tutorial de manipulação dos valores da database.

O uso da database me garante melhor organização das minhas variáveis, em comparação a storages.

Por storages você está preso a valores numéricos. Via database, você pode atribuir nomes, utilizar strings, e organizar as variáveis em grupos.

 

Responderei dúvidas conforme for possível.

 

 

Para inserir uma linha nova em uma tabela

db.executeQuery("INSERT INTO `accounts` (`id` ,`name` ,`password`)VALUES ('5', 'marcelo', 'druida');")

Neste exemplo, será adicionado na tabela accounts, uma nova conta marcelo/druida. (na verdade a senha é encriptada, mas serve como exemplo).

 

 

Para alterar valores na database

db.executeQuery("UPDATE players SET level = 1 WHERE id = 1 ;")

Neste exemplo, o valor do level do player com ID 1 será alterado.

 

players representa a tabela que será mudada

level representa a coluna

WHERE id representa a restrição, para que seja modificado apenas o player 1

 

Você pode alterar várias colunas ao mesmo tempo e usar várias restrições:

db.executeQuery("UPDATE players SET level = 1, experience = 0, lookType = 128 WHERE vocation = 1, town_id = 2 ;")

Neste exemplo, apenas o players Sorcerer que residem na town 2, terão o level, experience e outfit alterados.

 

Devo-lhes lembrar, que qualquer alteração nos players deve ser com o player offline.

Para isso, use: doRemoveCreature(cid) antes de alterar itens, mana, skills, etc. Sempre que o player sai os valores são atualizados, e a modificação será perdida!

 

 

Para deletar valores

db.executeQuery("DELETE FROM accounts WHERE id = 50 ;")

Remove a conta id 50 da tabela.

 

Você pode usar mais que uma restrição:

WHERE premdays = 0, group_id = 1

Para pegar valores

Em uma única linha de valores

id = getPlayerGUIDByName(getPlayerName(cid))
        local info = db.getResult("SELECT lastlogin, description FROM players WHERE id = " .. id .. " ;")
        local lastlogin = info:getDataInt("lastlogin")
        local description = info:getDataString("description")
        info:free()

Explicação:

Em info é armazenada a consulta à database.

Para transformar a consulta em valores, você usa os métodos getDataInt e getDataString.

Após adquirir os valores, use o método free() para fechar a consulta.

 

Lembrando que você pode usar múltiplas restrições.

 

 

 

Múltiplas linhas

local player = db.getResult("SELECT * FROM `players` WHERE level = 50;")    
tabela = {}
    if player:getID() ~= -1 then
        while(true) do
        table.insert(tabela, {player:getDataInt("id"), player:getDataInt("cap"), player:getDataInt("balance")})
            if not(player:next())then
                break
            end
        end
        player:free()
    else
        print("No database!")
    end
return tabela

Explicação:

Todos os players serão selecionados nesta consulta. O asterisco * representa que todas as colunas da tabela serão selecionados. Portanto, você pode pegar qualquer coluna que quiser.

 

O método getID() garante que a consulta foi bem sucedida. Caso contrário já retorna um erro.

 

O laço de repetição while(true) do garante que todas as linhas da consulta serão vistas.

 

Dentro do laço de repetição, será inserido na tabela = {} os valores da id, cap e balance.

 

if not(player:next())then break end garante que na ultima linha da consulta o laço de repetição chega ao fim.

 

Se por exemplo houver 3 players level 50, a tabela retornada terá o formato:

tabela = {{id1,cap1,balance1},{id2,cap2,balance2},{id3,cap3,balance3}}

 

------

 

Como complemento, deixo link para tópico do administrador Matheus

http://www.tibiaking.com/forum/topic/2023-phpmyadmin-comandos-uteis/

 

Bons estudos!

Abraços!

Editado por Marcelo Druida (veja o histórico de edições)

  • Respostas 6
  • Visualizações 1k
  • Created
  • Última resposta

Top Posters In This Topic

Postado

Ótimo tutorial, mano.

 

Seu tutorial foi aprovado, você recebeu um ponto de reputação e o tópico será movido para a área correta. :accept:

 

Esperamos mais conteúdos como este. ^^

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Postado

 

 

(na verdade a senha é encriptada, mas serve como exemplo).

Na verdade, só é encriptada a senha etc... Caso no config.lua não esteja "plain" como encriptação...pelo o que eu sei...

Editado por Snowsz (veja o histórico de edições)

                              _
                          .-'` `}
                  _./)   /       }
                .'o   \ |       }
                '.___.'`.\    {`
                /`\_/  , `.    }                                      ME DA UMA NOZ!
                \=' .-'   _`\  {
                 `'`;/      `,  }
                    _\   @   ;  }
                   /__`;-...'--'

Cluck!

Postado
  • Autor

Na verdade, só é encriptada a senha etc... Caso no config.lua não esteja "plain" como encriptação...pelo o que eu sei...

É, eu não conheço sobre isso.. meu servidor está configurado como sha1, nunca troquei.

 

 

Ótimo tutorial, mano.

 

Seu tutorial foi aprovado, você recebeu um ponto de reputação e o tópico será movido para a área correta. :accept:

 

Esperamos mais conteúdos como este. ^^

É um prazer dividir conhecimento.

Sempre que me sentir inspirado em trazer algum conteúdo, certamente o farei.

Se o fórum necessitar de algum conteúdo, posso também trabalhar nisto. Só preciso ser informado.

 

Abraços!

  • 1 month later...
Postado

O tópico foi movido para a área correta, preste mais atenção da próxima vez!

Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680

Este tópico foi movido:

De: "OTServScriptingTutoriais de Scripting"

Para: "OTServProgramação Open TibiaTutoriais de Programação"

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

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

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo