Jump to content

Serverside y Clientside


aka Blue

Recommended Posts

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

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

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

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). :mrgreen:

Link to comment

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

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

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

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.

uOgMdEN.png

Link to comment

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

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
  • Recently Browsing   0 members

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