brunob22 Posted June 25, 2015 Share Posted June 25, 2015 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
#RooTs Posted June 25, 2015 Share Posted June 25, 2015 não vi nenhuma variável definida com o nome de "nomejogador" tente colocar source ou thePlayer no lugar dela Link to comment
DNL291 Posted June 25, 2015 Share Posted June 25, 2015 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
n3wage Posted June 25, 2015 Share Posted June 25, 2015 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now