aka Blue Posted January 5, 2016 Share 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 Link to comment
starksZ Posted January 5, 2016 Share 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. Link to comment
aka Blue Posted January 5, 2016 Author Share Posted January 5, 2016 Básicamente sería utilizar UPDATE y poner el estado 'PAGADO'. Voy a probarlo, gracias @starksZ Link to comment
aka Blue Posted January 5, 2016 Author Share 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 ) Link to comment
Recommended Posts