SA-MP Forums Archive
Consulta Mysql - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Consulta Mysql (/showthread.php?tid=464912)



Consulta Mysql - Elpiezas - 19.09.2013

Una pregunta, yo hice un comando para guardar colores hexadecimales en una tabla en una base de datos sql, lo que quiero hacer es que mi jugador se cambie de color al color guardado, con SetPlayerColor, pero cuando me cambio el color se me pone negro, yo pensй logicamente que no me cargaba bien el color, entonces hice un SendClientMessage para que me muestre si cargaba bien el ID del color y resulta que carga bien, alguna ayuda?


Respuesta: Consulta Mysql - Elpiezas - 21.09.2013

Nadie sabe como hacerї :S


Respuesta: Consulta Mysql - The_Scope - 21.09.2013

Estarнa bueno que muestres tu cуdigo...


Respuesta: Consulta Mysql - Elpiezas - 21.09.2013

Quote:
Originally Posted by The_Scope
Посмотреть сообщение
Estarнa bueno que muestres tu cуdigo...
Explique como se guarda el color en la base de datos : HEXADECIMALMENTE
y cuando hago la funcion de que se cargue el archivo color en Hexadecimal lo hace bien, pero al poner SetPlayerColor, me lo hace color negro.

Supongamos que lo que se guarda en la base de datos es el color: "0x00FF00FF"

Yo dentro del server lo hago cargar, para comprobar que el se carga bien hice un SendClientMessage para que me muestre que es lo que se carga, y el resultado es que me dice: "0x00FF00FF", osea que se carga bien.

Pero cuando pongo la funcion SetPlayerColor(playerid, "color"); Se me cambia el color a negro, y no del color que esta guardado.


Respuesta: Consulta Mysql - DesingMyCry - 21.09.2013

Tienes 2 opciones para hacerlo.

Como supongo no sabias, cada color hexadecimal es enrealidad un nъmero. La funciуn "SetPlayerColor" lo que hace es representar ese dнgito exadecimal en un nъmero entero, pero eso lo haces directamente, no con cadenas de texto como cargas el color que guardas en la base de datos. Hasta ahora no espero que entiendas.

Ahora lo entretenido. Como ya dije, puedes hacerlo de 2 formas, una de ellas es guardar directamente en la base de dats el color como un nъmero entero, o hacerlo como actualmente lo usas pero usando una funciуn que transforme tu cadena de texto hexadecimal en el color.


pawn Код:
stock HexToInt(string[])
{
    if (string[0]==0) return 0;
    new i;
    new cur=1;
    new res=0;
    for (i=strlen(string);i>0;i--)
    {
        if (string[i-1]<58)
            res=res+cur*(string[i-1]-48);
        else res=res+cur*(string[i-1]-65+10);
        cur=cur*16;
    }
    return res;
}
Esa funciуn te transformarб lo que obtienes de la base de datos a un color. Se usa de la manera.

pawn Код:
new hex[] = "0xFFFFFFFF";

SetPlayerColor(jugadorid, HexToInt(hex));



Respuesta: Consulta Mysql - Elpiezas - 21.09.2013

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
Tienes 2 opciones para hacerlo.

Como supongo no sabias, cada color hexadecimal es enrealidad un nъmero. La funciуn "SetPlayerColor" lo que hace es representar ese dнgito exadecimal en un nъmero entero, pero eso lo haces directamente, no con cadenas de texto como cargas el color que guardas en la base de datos. Hasta ahora no espero que entiendas.

Ahora lo entretenido. Como ya dije, puedes hacerlo de 2 formas, una de ellas es guardar directamente en la base de dats el color como un nъmero entero, o hacerlo como actualmente lo usas pero usando una funciуn que transforme tu cadena de texto hexadecimal en el color.


pawn Код:
stock HexToInt(string[])
{
    if (string[0]==0) return 0;
    new i;
    new cur=1;
    new res=0;
    for (i=strlen(string);i>0;i--)
    {
        if (string[i-1]<58)
            res=res+cur*(string[i-1]-48);
        else res=res+cur*(string[i-1]-65+10);
        cur=cur*16;
    }
    return res;
}
Esa funciуn te transformarб lo que obtienes de la base de datos a un color. Se usa de la manera.

pawn Код:
new hex[] = "0xFFFFFFFF";

SetPlayerColor(jugadorid, HexToInt(hex));
Muchas gracias loco, use la funcion HexToInt y me funciono perfecto!, solo una duda me aparece esto:

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

Header size: 2532 bytes
Code size: 158200 bytes
Data size: 399076 bytes
Stack/heap size: 16384 bytes; estimated max. usage=4189 cells (16756 bytes)
Total requirements: 576192 bytes

Anteriormente no me pasaba, se que se trata de que esta usando muchos bytes o algo asi, pero aparece cuando escribo la funcion SetPlayerColor, si pongo #pragma dynamic 145000 no habria problema?


Respuesta: Consulta Mysql - DesingMyCry - 21.09.2013

Lo ideal seria que no tengas que usar ese cуdigo. Verifica que no estes creando variables demaciado grandes en algunas callbacks. El lнmite de tamaсo por callback es 2048 celdas en total de las variables (antes de que aparesca ese mensaje).