Jump to content

[SOLUCIONADO] ID que pertenece al jugador


aka Blue

Recommended Posts

Bueno, pues estaba creando un sistema de multas con guardado a MySQL para evitar que las multas se pierdan cuando el jugador cambia de personaje (sistema de lo más sencillo) y lo que quiero hacer que por ahora no he encontrado solución es que, al poner /multas, aparezcan las multas que tiene pendiente (hecho) pero y que al usar /pagarmulta ID, pague la multa que tiene pendiente el personaje (en eso tengo dudas).

Dejo el código por aquí porque es algo que todos podrían hacer.

Creación de la tabla y comando /multar con el almacenamiento en MySQL.

addEventHandler( "onResourceStart", resourceRoot, 
    function( ) 
        if not exports.sql:create_table( 'multas', 
            { 
                { name = 'id', type = 'int(10) unsigned', auto_increment = true, primary_key = true }, 
                { name = 'characterID', type = 'int(10) unsigned' }, 
                { name = 'estado', type = 'varchar(225)' }, 
                { name = 'cantidad', type = 'int(10) unsigned' }, 
                { name = 'razon', type = 'varchar(225)' }, 
            } ) then cancelEvent( ) return end 
    end 
) 
  
addCommandHandler ( "multar", 
    function ( player, commandName, other, cantidad, razon ) 
        local other, name = exports.players:getFromName ( player, other ) 
        local cantidad = tonumber ( cantidad ) 
        local razon = table.concat ( { razon }, " " ) 
        if ( exports.factions:isPlayerInFaction ( player, 1 ) ) then 
            if other and cantidad and razon then 
                local x, y, z = getElementPosition ( player ) 
                local x1, y1, z1 = getElementPosition ( other ) 
                local distance = getDistanceBetweenPoints3D ( x, y, z, x1, y1, z1 ) 
                if ( distance < 3 ) then 
                    local ID = exports.players:getCharacterID ( other ) 
                    local result, error = exports.sql:query_insertid( "INSERT INTO multas (characterID, estado, cantidad, razon) VALUES (".. ID..",'Pendiente',".. cantidad..",'".. razon.."')" ) 
                    if result then 
                        outputChatBox("     ---- Multa ----", other, 0, 192, 96 ) 
                        outputChatBox("     Razon: ".. razon, other, 255, 255, 0 ) 
                        outputChatBox("     Cantidad: ".. cantidad, other, 255, 255, 0 ) 
                        outputChatBox("     Usa /multas y /pagamulta [id] para pagar.", other, 255, 255, 0 ) 
                        outputChatBox("     -------------", other, 0, 192, 96 ) 
                        exports.chat:me ( player, "le entrega una multa a ".. name) 
                    else 
                        outputChatBox ( "Error MySQL", player, 255, 0, 0 ) 
                    end 
                end 
            else 
                outputChatBox ( "Syntax: /multar [id] [cantidad] [razon]", player, 255, 255, 255 ) 
            end 
        end 
    end 
) 

Ver las multas y su id (funciona correctamente)

addCommandHandler ( "multas", 
    function ( player ) 
        local id = exports.players:getCharacterID ( player ) 
        local result = exports.sql:query_assoc( "SELECT * FROM multas ORDER BY "..id.." ASC" ) 
        if result then 
            for k, v in ipairs ( result ) do 
                local id = v.id 
                local estado = v.estado 
                local razon = v.razon 
                local cantidad = v.cantidad 
                outputChatBox ( "Multas pendientes:", player, 255, 255, 0 ) 
                outputChatBox ( id..": Estado: "..estado.. " Cantidad: "..cantidad.." Razon: "..razon, player, 0, 255, 120 ) 
            end 
        else 
            outputChatBox ( "Error MySQL", player, 255, 0, 0 ) 
        end 
    end 
) 

Pagar la multa con x id. Aquí es donde me he hecho el lio de dios.

addCommandHandler ( "pagamulta", 
    function ( player, cmd, id ) 
        if id then 
            local result = exports.sql:query_assoc( "SELECT * FROM multas ORDER BY "..id.." ASC" ) 
            if result then 
                for k, v in ipairs ( result ) do 
                    local ID = v.id 
                    local cantidad = v.cantidad [ID] 
                    outputChatBox ( "Has pagado la multa con ID "..tonumber ( ID ), player, 255, 255, 0 ) 
                    takeMoney ( player, cantidad ) 
                end 
            end 
        else 
            outputChatBox ( "Syntax: /pagamulta [id]", player, 255, 255, 255 ) 
        end 
    end 
) 

Edited by Guest
Link to comment

Me imagino que si un jugador tiene una multa esta seria la primera y llevaria el id 1 ( o #1234 ), entonces si quieres que se page una multa de un player desde cierta ID.

Usa

"DELETE FROM multas WHERE player=? AND id=?" 

pero creo que deberias incluir el jugador en la base de datos, por que si no borrarias varios datos que tengan la misma id o Si no solo la ID siendo que el numero de ID de una multa se auto incremente ( Multa #2456 ) 'WHERE id=?', nose si me explique bien.

Link to comment

Acabé haciéndolo a mi manera. Gracias @starksZ, la verdad es que no me vino a la cabeza eso de WHERE... a veces pasa xD.

  
addCommandHandler ( "pagarmulta", 
    function ( player, commandName, id ) 
        local charID = exports.players:getCharacterID ( player ) 
        if exports.players:isLoggedIn ( player ) then 
            if id then 
                local result = exports.sql:query_assoc( "SELECT * FROM multas WHERE characterID = "..charID.." AND id = "..id ) 
                if result then 
                    for k, data in ipairs ( result ) do 
                        if data.estado == 'Pendiente' then 
                        local cantidad = data.cantidad 
                        local id = data.id 
                        takePlayerMoney ( player, cantidad ) 
                        outputChatBox ( "Has pagado $"..cantidad.." para pagar la multa con ID: "..id, player, 255, 255, 0 ) 
                        exports.sql:query_free( "UPDATE multas SET estado = 'Pagado' WHERE characterID = " .. charID .. " AND id = "..id ) 
                        else 
                            outputChatBox ( "La multa con ID: "..id.." ya está pagada.", player, 255, 255, 0 ) 
                        end 
                    end 
                end 
            else 
                outputChatBox ( "Syntax: /pagarmulta [id]", player, 255, 255, 255 ) 
            end 
        end 
    end 
) 

Link to comment
  • Recently Browsing   0 members

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