aka Blue Posted January 5, 2016 Posted January 5, 2016 (edited) 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 January 5, 2016 by Guest
starksZ Posted January 5, 2016 Posted January 5, 2016 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.
aka Blue Posted January 5, 2016 Author Posted January 5, 2016 Básicamente sería utilizar UPDATE y poner el estado 'PAGADO'. Voy a probarlo, gracias @starksZ
aka Blue Posted January 5, 2016 Author Posted January 5, 2016 Acabé haciéndolo a mi manera. Gracias @starksZ, la verdad es que no me vino a la cabeza eso de WHERE... a veces pasa . 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 )
Recommended Posts