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

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...