AlFA# Posted April 27, 2015 Share Posted April 27, 2015 Buenas, pues me gustaría saber que funciones tendría que hacer para un sistema de puntos de rol, el cual se almacene en MySQL. Me explico un poco mejor, lo que yo quiero hacer es que si "X" usuario hace un buen rol pues que con un comando se le añada 1 punto y salga en la scoreboard o por dxDrawText los puntos que lleva. Pero si ese lo hace mal, puedas quitarle un punto de rol. No pido que me lo hagan, solo que me guíen un poco, ya que estoy iniciando en esto de .lua Muchas gracias. Link to comment
Tomas Posted April 27, 2015 Share Posted April 27, 2015 Para almacenar algo en MySQL necesitas primero que nada un servidor MySQL, así que usaremos SQLite. if not fileExists("rol.db") then fileCreate("rol.db") end connection = dbConnect( "sqlite", "rol.db") if connection then dbExec( connection, "CREATE TABLE IF NOT EXISTS PuntosRol (cuenta TEXT, puntos NUMBER)" ) function addRoleplayPoints( cuenta, puntos ) if #dbPoll ( dbQuery ( connection , "SELECT * FROM PuntosRol WHERE cuenta = ?" , cuenta ) , -1 ) == 0 then dbExec( connection, "INSERT INTO PuntosRol (cuenta,puntos) VALUES (?,?)", cuenta , tonumber(puntos) ) else puntosTable = dbPoll ( dbQuery ( connection , "SELECT * FROM PuntosRol WHERE cuenta = ?", cuenta) , -1 ) dbExec( connection, "UPDATE PuntosRol SET puntos = ? WHERE cuenta = ?", tonumber(puntos)+ puntosTable [ 1 ] ['puntos'], cuenta) end end function getRoleplayPoints ( cuenta ) if #dbPoll ( dbQuery ( connection , "SELECT * FROM PuntosRol WHERE cuenta = ?" , cuenta ) , -1 ) == 0 then return 0 else return dbPoll ( dbQuery ( connection , "SELECT * FROM PuntosRol WHERE cuenta = ?" , cuenta ) , -1 ) [ 1 ] ['puntos'] end end setTimer ( function ( ) for _ , value in ipairs( getElementsByType( "players" ) ) do if not isGuestAccount ( getPlayerAccount ( value ) ) then setElementData(value, "Puntos de Rol", getRoleplayPoints ( getAccountName ( getPlayerAccount ( value ) ) ) ) end end end , 15000, 0 ) exports.scoreboard:scoreboardAddColumn( "Puntos de Rol" ) end Espero que te sirva. Link to comment
AlFA# Posted April 28, 2015 Author Share Posted April 28, 2015 Muchas gracias por responder Tomas, pero yo tengo esto como base pero no me funciona, me da un error. players/rol.lua:11: attempt to perform arithmetic on a nil value function puntosr ( player, commandName, otherPlayer, resultado ) if otherPlayer and resultado then local other, name = exports.players:getFromName( player, otherPlayer ) if other then if tostring(resultado) == "Bien" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol")+1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) elseif tostring(resultado) == "Mal" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol")-1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) end end else outputChatBox("Syntax: /" .. commandName .. " [jugador] [Resultado = Bien, Mal]", player, 255, 255, 255) end end addCommandHandler ("rol", puntosr ) Link to comment
Tomas Posted April 28, 2015 Share Posted April 28, 2015 function puntosr ( player, commandName, otherPlayer, resultado ) if otherPlayer and resultado then local other, name = exports.players:getFromName( player, otherPlayer ) if other then if tostring(resultado) == "Bien" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 +1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) elseif tostring(resultado) == "Mal" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 -1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) end end else outputChatBox("Syntax: /" .. commandName .. " [jugador] [Resultado = Bien, Mal]", player, 255, 255, 255) end end addCommandHandler ("rol", puntosr ) Link to comment
AlFA# Posted April 28, 2015 Author Share Posted April 28, 2015 function puntosr ( player, commandName, otherPlayer, resultado ) if otherPlayer and resultado then local other, name = exports.players:getFromName( player, otherPlayer ) if other then if tostring(resultado) == "Bien" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 +1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) elseif tostring(resultado) == "Mal" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 -1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) end end else outputChatBox("Syntax: /" .. commandName .. " [jugador] [Resultado = Bien, Mal]", player, 255, 255, 255) end end addCommandHandler ("rol", puntosr ) Me ha funcionado pero tiene un problema y es que solo le puedo dar 1 de rol, no me deja ponerle más, y lo que yo quiero es que si tiene 1 y un adm le da 1 más se le sume al que tenia anteriormente. Y cuando pongo /rol ID Mal no le quita el punto... Gracias por responder Tomas. Link to comment
Enargy, Posted April 28, 2015 Share Posted April 28, 2015 Puedes echarle un vistazo a mi Coinsystem que es practicamente la misma finalidad que el dinero del juego, estoy en el phone pero puedes editarlo a tu preferencia. Link to comment
Tomas Posted April 28, 2015 Share Posted April 28, 2015 (edited) ¿Estás seguro que 'other' devuelve un elemento de jugador? Te organicé un poco tu script así lo entiendes mejor. function puntosr ( player, commandName, otherPlayer, resultado ) if otherPlayer and resultado then local other, name = exports.players:getFromName( player, otherPlayer ) if other then if resultado == "Bien" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 +1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) elseif resultado == "Mal" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 -1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) end end else outputChatBox("Syntax: /" .. commandName .. " [jugador] [Resultado = Bien, Mal]", player, 255, 255, 255) end end addCommandHandler ("rol", puntosr ) Edited April 29, 2015 by Guest Link to comment
AlFA# Posted April 28, 2015 Author Share Posted April 28, 2015 ¿Estás seguro que 'other' devuelve un elemento de jugador? Te organicé un poco tu script así lo entiendes mejor. function puntosr ( player, commandName, otherPlayer, resultado ) if otherPlayer and resultado then local other, name = exports.players:getFromName( player, otherPlayer ) if other then if resultado == "Bien" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 +1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) elseif resultado == "Mal" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 -1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) end end else outputChatBox("Syntax: /" .. commandName .. " [jugador] [Resultado = Bien, Mal]", player, 255, 255, 255) end end addCommandHandler ("rol", puntosr ) ¿Como puedo saber si 'other' devuelve un elemento de jugador? Perdona por mi gran ignorancia Link to comment
Enargy, Posted April 29, 2015 Share Posted April 29, 2015 ¿Estás seguro que 'other' devuelve un elemento de jugador? Te organicé un poco tu script así lo entiendes mejor. function puntosr ( player, commandName, otherPlayer, resultado ) if otherPlayer and resultado then local other, name = exports.players:getFromName( player, otherPlayer ) if other then if resultado == "Bien" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 +1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) elseif resultado == "Mal" then setElementData(other, "EstadoDeRol", getElementData(other, "EstadoDeRol") or 0 -1) outputChatBox("El usuario "..name.." ahora tiene ".. getElementData(other, "EstadoDeRol").. "% de rol", player, 255, 0, 0 ) end end else outputChatBox("Syntax: /" .. commandName .. " [jugador] [Resultado = Bien, Mal]", player, 255, 255, 255) end end addCommandHandler ("rol", puntosr ) ¿Como puedo saber si 'other' devuelve un elemento de jugador? Perdona por mi gran ignorancia Usa outputs para comprobar si other no sea false. Link to comment
Tomas Posted April 29, 2015 Share Posted April 29, 2015 O desde el runcode más fácil con un isElement Link to comment
Recommended Posts