Jump to content

[AJUDA] BANCO DE DADOS...


Recommended Posts

function conectado () 
    db = dbConnect( "sqlite","bancodedados.db" ) 
end 
addEventHandler( "onResourceStart", getRootElement(  ),conectado) 
  
  
function inserirdados (source,q) 
    dbQuery(db, "DROP TABLE dadoplayer") 
    dbQuery(db, "CREATE TABLE IF NOT EXISTS dadoplayer (id,nomejogador,dinheiro)" ) 
        local name = getPlayerName(source) 
        local dinheiro = getPlayerMoney(source) 
        local id = math.random(1,9999) 
        outputChatBox(name) 
    local db2 = dbQuery(db, "INSERT INTO dadoplayer (id,nomejogador,dinheiro) VALUES(?,?,?)",id,name,dinheiro ) 
end 
  
addCommandHandler( "salvar", inserirdados) 
  
function loaddinheiro (id,nomejogador,dinheiro) 
    givePlayerMoney(nomejogador,dinheiro) 
    outputChatBox("OK CARREGADOS") 
end 
  
  
function carregar (q) 
    if (q) then 
        local p = dbPoll( q, 0) 
            for i, dados in pairs( p ) do 
              loaddinheiro(dados["id"] ,dados["nomejogador"],dados["dinheiro"]); 
              outputChatBox( "OK" ) 
        end 
    end 
end 
  
  
  
  
  
  
function carregar1 () 
    dbQuery(carregar, { }, db, "SELECT * FROM dadoplayer") 
end 
  
addCommandHandler( "carrega", carregar1) 

to com problema na linha 20 que seria

givePlayerMoney(nomejogador,dinheiro) 

alguem pode me dar um help?

Link to comment
  • Moderators

Não tenho tanta experiência com SQL, mas seu código tem vários erros.

Tente isto:

  
function conectado () 
    db = dbConnect( "sqlite","bancodedados.db" ) 
    if db then 
        dbExec(db, "CREATE TABLE IF NOT EXISTS dadoplayer ( id INT, nomejogador TEXT, dinheiro INT )" ) 
    else 
        outputChatBox("O banco de dados não pôde ser conectado!") 
    end 
end 
addEventHandler( "onResourceStart", resourceRoot,conectado) 
  
function inserirdados (source,cmd) 
    local name = getPlayerName(source) 
    local dinheiro = getPlayerMoney(source) 
    local id = math.random(1,9999) 
    outputChatBox("PlayerName: "..name.."; Money: "..tostring(dinheiro).."; ID: "..tostring(id)) 
    local g_id = dbPoll( dbQuery( db, "SELECT id FROM dadoplayer WHERE nomejogador=?", name )[1]["id"] ), - 1 ) 
    if tonumber(g_id) then 
        dbExec(db, "UPDATE dadoplayer SET id=?, dinheiro=? WHERE nomejogador=?", id,dinheiro,name ) 
    else 
        dbExec(db, "INSERT INTO `dadoplayer` (`id`, `nomejogador`, `dinheiro`) VALUES(?,?,?)", id,name,dinheiro ) 
    end 
end 
addCommandHandler( "salvar", inserirdados) 
  
function carregar( nome ) 
    local q = dbQuery(db, "SELECT * FROM dadoplayer WHERE nomejogador=?", tostring(nome))[1] 
    givePlayerMoney(getPlayerFromName(nome), tonumber(q["dinheiro"])) 
    outputChatBox("ID: ".. tostring(q["id"] or false).." Dinheiro: ".. tostring(q["dinheiro"] or false)) 
end 
  
function loaddata(p) 
    carregar( getPlayerName(p) ) 
end 
addCommandHandler("carrega", loaddata) 

Veja o que mostra no chat.

Note que o salvamento é baseado no nome do jogador, então, evite usar isso no servidor, em vez disso, você pode salvar usando a conta.

Link to comment

Deixei ~alguns~ comentários no código, espero que você entenda, e como já dito pelo DNL é melhor você usar a conta do jogador para salvar dados pois se ele entrar com outro nick o código abaixo já vai falhar..

db = dbConnect( "sqlite","bancodedados.db" ) 
dbExec ( db, "CREATE TABLE IF NOT EXISTS dadoplayer ( id INT, nomejogador TEXT, dinheiro INT )" ) 
--[[  
    ↑ 
    você não precisa criar a tabela toda vez que for inserir dados, uma vez ja basta 
    tambem não é necessario usar dbQuery, ja que você não quer o resultado da ação de criar a tabela 
--]] 
DadosT = {} -- Explicação na linha 27~29 
  
  
function inserirdados (source,q) 
    --[[ 
        ↑ vale lembrar que 'q' será sempre 'salvar' (o comando digitado pelo jogador) 
        não o use como uma query 
    --]] 
    local name = getPlayerName(source) 
    local dinheiro = getPlayerMoney(source) 
    local id = math.random(1,9999) 
    --novamente, não acho necessario saber o resultado da query, entao vamos usar dbExec ;p 
    --local db2 = dbQuery(db, "INSERT INTO dadoplayer (id,nomejogador,dinheiro) VALUES(?,?,?)",id,name,dinheiro ) 
    dbExec ( db, "INSERT INTO dadoplayer ( id, nomejogador, dinheiro ) VALUES ( ?, ?, ? )", id, name, dinheiro ) 
     
    --[[ 
    você tambem tem que saber se o nick ja esta salvo no database para não ficar inserindo varias vezes o mesmo nick 
     
    se ele já tiver salvo você tera que usar a query UPDATE: 
     
    [url=http://www.w3schools.com/sql/sql_update.asp]http://www.w3schools.com/sql/sql_update.asp[/url] 
    --]] 
end 
addCommandHandler( "salvar", inserirdados) 
  
function loaddinheiro (id,nomejogador,dinheiro) 
    --[[ 
    aqui um problema, nomejogador é uma string (o nick do player) 
    o melhor é você salvar os dados em uma tabela e dar o dinheiro 
    quando o jogador logar, claro, antes checando se ele já esta no servidor 
    --]] 
    if getPlayerFromName ( nomejogador ) then 
        local jogador = getPlayerFromName ( nomejogador ) 
        givePlayerMoney(jogador, dinheiro ) 
        outputChatBox( "SEU DINHEIRO FOI CARREGADO !!", jogador ) 
    else 
        DadosT[nomejogador] = dinheiro 
    end 
end 
  
addEventHandler ( "onPlayerLogin", root, 
function ( ) 
    local nomejogador = getPlayerName ( source ) 
    if DadosT[nomejogador] then 
        givePlayerMoney ( source, DadosT[nomejogador] ) 
        outputChatBox( "SEU DINHEIRO FOI CARREGADO !!", source ) 
    end 
end ) 
  
function carregar (q) 
    if (q) then 
        local p = dbPoll( q, 0 ) -- não é recomendado usar 0 para um resultado instantaneo ja que a função pode falhar.. 
        if ( p ) then 
            for i, dados in pairs( p ) do 
                loaddinheiro( dados["id"] ,dados["nomejogador"],dados["dinheiro"] ); 
                print ( dados["nomejogador"].." Carregado.." ) 
            end 
        else 
            print ( "database não foi carregado !" ) 
        end 
    end 
end 
  
function carregar1 () 
    dbQuery ( carregar, db, "SELECT * FROM dadoplayer" ) 
    outputChatBox ( "carregando..." ) 
end 
addCommandHandler( "carrega", carregar1) 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...