Jump to content

[Rol] Sistema


AlFA#

Recommended Posts

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

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

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

¿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 by Guest
Link to comment
¿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
¿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
  • Recently Browsing   0 members

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