alex17 Posted July 29, 2015 Share Posted July 29, 2015 en esta parte del codigo que es donde guardas la base de datos de donde sacas vehicleID , muestra esa parte . exports.sql:query_free( "UPDATE vehicles SET color1 = "..color1.." WHERE vehicleID = " .. data.vehicleID) Link to comment
aka Blue Posted July 29, 2015 Author Share Posted July 29, 2015 No sé si te refieres al formato de lo que viene siendo la tabla que se crea o el formato de dicha tabla, osea, tinyint3 y demás formatos, ahí si que no sé decirte jaja. Simplemente quiero que se almacenen los colores en la base de datos pero veo que por formato RGB no se puede, creo. Link to comment
Enargy, Posted July 29, 2015 Share Posted July 29, 2015 No sé si te refieres al formato de lo que viene siendo la tabla que se crea o el formato de dicha tabla, osea, tinyint3 y demás formatos, ahí si que no sé decirte jaja.Simplemente quiero que se almacenen los colores en la base de datos pero veo que por formato RGB no se puede, creo. Formato RGB = 255, 255, 255. Hexadecimal = #FFFFFF (BLANCO). Link to comment
aka Blue Posted July 29, 2015 Author Share Posted July 29, 2015 No sé si te refieres al formato de lo que viene siendo la tabla que se crea o el formato de dicha tabla, osea, tinyint3 y demás formatos, ahí si que no sé decirte jaja.Simplemente quiero que se almacenen los colores en la base de datos pero veo que por formato RGB no se puede, creo. Formato RGB = 255, 255, 255. Hexadecimal = #FFFFFF (BLANCO). No, no, eso ya lo sé jaja, lo que no entiendo es por qué no me guarda en la base de datos los colores, por eso dije que puede ser que no lea RGB ya que el comando /setVehicleColor (el que hace el update de la base de datos), funciona con los colores default de MTA. Osea, el 1, el 2, el 3... PD: Arreglado, gracias por la ayuda Link to comment
aka Blue Posted July 31, 2015 Author Share Posted July 31, 2015 Siento revivir pero acabo de ver que lo que hice no funciona, nuevamente. Resulta que investigué un poco más por el script y lo que hace esa tabla es guardar los colores con las id del propio MTA y no en formato RGB, como dije anteriormente pero no estaba muy seguro. Para los que no sepan a que me refiero con los colores con la ID del propio MTA son del 1 hasta el 126 o así, los cuadritos de colores que salen en la wiki, en el apartado de Colors ID. Actualmente estoy un poco perdido porque no sé que hacer, estuve pensando en hacer una columna destinada a RGB, algo como "colores" y que tenga 3 filas, indicando el valor de cada letra R, G y B pero no estoy muy seguro. Dejo el código por aquí para ver si alguien me puede ayudar, gracias nuevamente. function pintarlo ( player, r, g, b, colorsio, colorsio2) local vehicle = getPedOccupiedVehicle( player ) local data = vehicles[ vehicle ] if vehicle and r and g and b then r1, g1, b1, r2, g2, b2 = getVehicleColor(vehicle, true) if colorsio then colorsio = {r, g, b] --Ésto lo añado desde el post pero lo he probado y no funciona igual, he probado poniendo y 255, 255, 255 sustituyendo las letras pero nada igual. setVehicleColor (vehicle, r, g, b, r2, g2, b2) exports.sql:query_free( "UPDATE vehicles SET color1 = "..colorsio.." WHERE vehicleID = " .. data.vehicleID) end if colorsio2 then local colorsio2 = 2 colorsio2 = {r, g, b] --Ésto lo añado desde el post pero lo he probado y no funciona igual, he probado poniendo y 255, 255, 255 sustituyendo las letras pero nada igual. setVehicleColor (vehicle, r1, g1, b1, r, g, b) exports.sql:query_free( "UPDATE vehicles SET color2 = "..colorsio2.." WHERE vehicleID = " .. data.vehicleID) end end end addEvent( "onPintura", true ) addEventHandler( "onPintura", getRootElement(), pintarlo) Link to comment
alex17 Posted July 31, 2015 Share Posted July 31, 2015 lo estas poniendo mal las llaves {} error colorsio2 = {r, g, b] intenta con esto colorsio2 = {r, g, b} Link to comment
aka Blue Posted July 31, 2015 Author Share Posted July 31, 2015 En lo que viene siendo el script, lo tenía bien. Probé poniendo la "," al final de la tabla o como le digan pero igual, ahora me da un error. Lo dejo todo abajo. Código serverside, el clientside es solo un panel. function pintarlo ( player, r, g, b, colorsio, colorsio2) local vehicle = getPedOccupiedVehicle( player ) local data = vehicles[ vehicle ] if vehicle and r and g and b then r1, g1, b1, r2, g2, b2 = getVehicleColor(vehicle, true) if colorsio then colorsio = {r, g, b} setVehicleColor (vehicle, r, g, b, r2, g2, b2) exports.sql:query_free( "UPDATE vehicles SET color1 = "..colorsio.." WHERE vehicleID = " .. data.vehicleID) end if colorsio2 then local colorsio2 = 2 colorsio2 = {r, g, b} setVehicleColor (vehicle, r1, g1, b1, r, g, b) exports.sql:query_free( "UPDATE vehicles SET color2 = "..colorsio2.." WHERE vehicleID = " .. data.vehicleID) end end end addEvent( "onPintura", true ) addEventHandler( "onPintura", getRootElement(), pintarlo) Error que me da [2015-07-31 10:51:43] ERROR: vehicles\vehicles.lua:828: attempt to concatenate local 'colorsio2' (a table value) [2015-07-31 10:51:43] ERROR: vehicles\vehicles.lua:822: attempt to concatenate local 'colorsio' (a table value) Link to comment
Tomas Posted July 31, 2015 Share Posted July 31, 2015 'colorsio' es una tabla, para guardarla en forma de string puedes usar JSON o table.concat (y split para crearla). Link to comment
aka Blue Posted July 31, 2015 Author Share Posted July 31, 2015 No, es que verás, la GM de Paradise por defecto, crea tablas destinadas a ello, en éste caso, color1 y color2, de las cuales, edité su formato, cambiandolo por varchar(500), por lo que me dijeron. { name = 'color1', type = 'varchar(500)'}, { name = 'color2', type = 'varchar(500)'}, También añadí una nueva función que me pasaron. La función de arriba de RGB viene por defecto en la GM de Paradise, la de abajo es la añadida. function RGB2HEX(r,g,b) local hex = string.format("#%02X%02X%02X", r,g,b) return hex end function HEX2RGB(hextring)--Ésta es la que me pasaron hextring = tostring(hextring) if string.len(hextring) < 4 then return 0,0,0 end hextring = string.gsub(hextring,"#","") local r,g,b = tonumber("0x"..string.sub(hextring, 1, 2)) or 0, tonumber("0x"..string.sub(hextring, 3, 4)) or 0, tonumber("0x"..string.sub(hextring, 5, 6)) or 0 return r,g,b end Al iniciar el servidor, ejecutaría lo siguiente. if data.color1 and data.color2 then r, g, b = HEX2RGB(data.color1) r2, g2, b2 = HEX2RGB(data.color2) setVehicleColor( vehicle, r, g, b, r2, g2, b2 ) end setVehicleColor( vehicle, data.color1, data.color2, data.color1, data.color2 ) Al crear un vehículo haría local r,g,b,r2,g2,b2 = getVehicleColor( vehicle ) Éste comando es del que más hablaba. Lo que hace es que al usar /setvehiclecolor [id] [idcolor1] [idcolor2], pone el color al vehículo. addCommandHandler( { "setvehiclecolor", "setcolor" }, function( player, commandName, other, color1, color2 ) local color1 = tonumber( color1 ) local color2 = tonumber( color2 ) or color1 if other and color1 and color2 and color1 >= 0 and color1 <= 255 and color2 >= 0 and color2 <= 255 then local other, name = exports.players:getFromName( player, other ) if other then local vehicle = getPedOccupiedVehicle( other ) if vehicle then local data = vehicles[ vehicle ] if data then if data.vehicleID < 0 or exports.sql:query_free( "UPDATE vehicles SET color1 = " .. color1 .. ", color2 = " .. color2 .. " WHERE vehicleID = " .. data.vehicleID ) then setVehicleColor( vehicle, color1, color2, color1, color2 ) outputChatBox( "Cambiado el color del vehículo de " .. name .. "." .. getVehicleName( vehicle ) .. ".", player, 0, 255, 153 ) else outputChatBox( "Error MYSQL.", player, 255, 0, 0 ) end else outputChatBox( "Error del vehículo.", player, 255, 0, 0 ) end else outputChatBox( name .. " no está conduciendo un vehículo.", player, 255, 0, 0 ) end end else outputChatBox( "Syntax: /" .. commandName .. " [player] [color 1] [color 2]", player, 255, 255, 255 ) end end, true ) Ahora bien, tenemos todo eso pero estoy muy perdido la verdad, probé de todo y nada. Éste es el código final que tengo. function pintarlo ( player, r, g, b, colorsio, colorsio2) local vehicle = getPedOccupiedVehicle( player ) local data = vehicles[ vehicle ] if vehicle and r and g and b then r1, g1, b1, r2, g2, b2 = getVehicleColor(vehicle, true) if colorsio then local colorsio = 1 setVehicleColor (vehicle, r, g, b, r2, g2, b2) exports.sql:query_free( "UPDATE vehicles SET color1 = " .. colorsio .. " WHERE vehicleID = " .. data.vehicleID ) end if colorsio2 then local colorsio2 = 2 setVehicleColor (vehicle, r1, g1, b1, r, g, b) exports.sql:query_free( "UPDATE vehicles SET color2 = " .. colorsio2 .. " WHERE vehicleID = " .. data.vehicleID ) end end end addEvent( "onPintura", true ) addEventHandler( "onPintura", getRootElement(), pintarlo) Por si no entendieron muy bien lo que quiero hacer, lo expongo. Estoy scripteando un pequeño script de mecanico tanto para mi servidor como para la comunidad de MTA (lo postearé y cualquiera lo puede descargar, editar y lo que quiera hacer). Lo que pasa es que uso el colorblender que exporta el color en formato rgb, cosa que, no sé como almacenar en las tablas que crea MTA Paradise. (Creo que me he explicado más o menos bien). Link to comment
alex17 Posted August 1, 2015 Share Posted August 1, 2015 por que no lo haces así function pintarlo ( player, r, g, b, colorsio, colorsio2) local vehicle = getPedOccupiedVehicle( player ) local data = vehicles[ vehicle ] if vehicle and r and g and b then r1, g1, b1, r2, g2, b2 = getVehicleColor(vehicle, true) if colorsio then local colorsio = r..";"..g..";"..b setVehicleColor (vehicle, r, g, b, r2, g2, b2) exports.sql:query_free( "UPDATE vehicles SET color1 = "..colorsio.." WHERE vehicleID = " .. data.vehicleID) end if colorsio2 then local colorsio2 = r..";"..g..";"..b setVehicleColor (vehicle, r1, g1, b1, r, g, b) exports.sql:query_free( "UPDATE vehicles SET color2 = "..colorsio2.." WHERE vehicleID = " .. data.vehicleID) end end end addEvent( "onPintura", true ) addEventHandler( "onPintura", getRootElement(), pintarlo) y cuando quieras obtener los colores como dice tomas solo usas split Link to comment
aka Blue Posted August 1, 2015 Author Share Posted August 1, 2015 Creo que es lo que dice Tomas lo que quiero lograr hacer. A ver, lo que viene siendo pintar el vehículo lo pinta lo que pasa es que no lo almacena en la base de datos porque es formato RGB y eso se ve que no lo lee o ni idea. Explicandome un poco mejor, la tabla almacena los colores de MTA, es decir, los 126 colores que da MTA. Lo que no se hacer es que al usar un color, lo transforme en el formato de MTA y lo almacene en la base de datos. PD: CREO que es así. Link to comment
alex17 Posted August 1, 2015 Share Posted August 1, 2015 puedes usar esta funcion function RGBToHex(red, green, blue, alpha) if((red < 0 or red > 255 or green < 0 or green > 255 or blue < 0 or blue > 255) or (alpha and (alpha < 0 or alpha > 255))) then return nil end if(alpha) then return string.format("#%.2X%.2X%.2X%.2X", red,green,blue,alpha) else return string.format("#%.2X%.2X%.2X", red,green,blue) end end y en tu codigo lo pones asi function RGBToHex(red, green, blue, alpha) if((red < 0 or red > 255 or green < 0 or green > 255 or blue < 0 or blue > 255) or (alpha and (alpha < 0 or alpha > 255))) then return nil end if(alpha) then return string.format("#%.2X%.2X%.2X%.2X", red,green,blue,alpha) else return string.format("#%.2X%.2X%.2X", red,green,blue) end end[ function pintarlo ( player, r, g, b, colorsio, colorsio2) local vehicle = getPedOccupiedVehicle( player ) local data = vehicles[ vehicle ] if vehicle and r and g and b then r1, g1, b1, r2, g2, b2 = getVehicleColor(vehicle, true) if colorsio then local colorsio = RGBToHex(r,g,b) setVehicleColor (vehicle, r, g, b, r2, g2, b2) exports.sql:query_free( "UPDATE vehicles SET color1 = "..colorsio.." WHERE vehicleID = " .. data.vehicleID) end if colorsio2 then local colorsio2 = RGBToHex(r,g,b) setVehicleColor (vehicle, r1, g1, b1, r, g, b) exports.sql:query_free( "UPDATE vehicles SET color2 = "..colorsio2.." WHERE vehicleID = " .. data.vehicleID) end end end addEvent( "onPintura", true ) addEventHandler( "onPintura", getRootElement(), pintarlo) Link to comment
aka Blue Posted August 1, 2015 Author Share Posted August 1, 2015 No, no quiere. Es que no lo entiendo, le doy a restart vehicles y nada, es como si no se guardase y el código de guardado del color (el exports), lo he comprobado con el otro comando (/setvehiclecolor) y si que va. Lo que hace es guardarlo con el código de MTA y no RGB, no entiendo nada. Aquí dejo una foto de como se guarda en mi base de datos. Link to comment
alex17 Posted August 1, 2015 Share Posted August 1, 2015 vos quiere guardar en su base de dato el numero del color que viene a ser del 0 al 126 ? o quiere guardar el codigo del color como este #ffffff? Link to comment
aka Blue Posted August 1, 2015 Author Share Posted August 1, 2015 Es que verás, yo utilizo, para la función de pintar el color, un script llamado colorblender que exporta el color a formato RGB por lo que veo. ¿Hay alguna diferencia entre los colores del 126 y el #ffffff?. Lo que me sale al utilizar la función es un panel, típico del guieditor o del freeroam mismo, ya me entiendes, el tipico para elegir color blabla. Link to comment
Mr.Aleks Posted August 1, 2015 Share Posted August 1, 2015 Esas columnas si no recuerdo mal vienen creadas por defecto ¿no? De ser así, cómo se queda registrado en la base de datos con el color del coche default?, en esa imagen que pasaste solo se muestra cómo se te guarda desde tu script, no un coche creado por defecto. Si te apetece puedes editar el script entero y hacer que el color en RGB se guarde de la siguiente manera, y se cargue después: --para guardar color = {r,g,b} stringaguardar = toJSON(color) -- para cargar ( teniendo en cuenta que data.color1 es el valor que devuelve al sacarlo del MYSQL) color = fromJSON(data.color1) PD: Deberías de mirarte las funciones JSON y también aprender a manejarte bien con las tablas. Algo primordial si vas a usar Paradise en mi opinión. Link to comment
Recommended Posts