SA-MP Forums Archive
Dudas sobre colores - 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: Dudas sobre colores (/showthread.php?tid=574727)



Dudas sobre colores - Guss - 19.05.2015

Hola, venнa por aquн a ver si alguien me puede sacar de dudas con esto...

Quiero saber donde se define el color de cada id por defecto, quiero decir, porque a veces entro al servidor con un gamemode de esos que trae sa-mp y a veces el color de id 0 es un gris azulado o naranja, donde se determina el color que se asigna a cada id?

Otra cosa tambiйn, yo quiero extraer el color que tenga el jugador al momento.. ejemplo: En mi servidor un jugador puede elegir su color con el comando /color. Luego en un mensaje aleatorio de esos de preguntas con premio al primero en responder da un mensaje de quien gano, algo asн "%s ha ganado el mini cuestionario" entonces puedo darle un color al mensaje entero, pero yo quiero que en el nombre o %s extraiga el color que lleva el jugador al momento y muestre el mensaje con el nombre del jugador con su color y el resto en el color que yo le de en el sendclientmessage. Como se hace?

Por favor, y gracias por tomarse el tiempo en leer.


Respuesta: Dudas sobre colores - Goncho28 - 19.05.2015

Buenas, el color lo puedes tomar con esta funciуn https://sampwiki.blast.hk/wiki/GetPlayerColor

Estб predefinido por SA-MP algunos colores y si no le pones un color al entrar siempre serбn aleatorios, para poner un color usa https://sampwiki.blast.hk/wiki/SetPlayerColor

Para lo del mensaje usa un string ya que permite colocar los integers que pides, saludos.


Respuesta: Dudas sobre colores - Zume - 19.05.2015

http://forum.sa-mp.com/showpost.php?...61&postcount=9

Entonces, el color que sacamos ahi es en hexadecimal, pasando el hexadecimal a numeros igual seria el mismo color, entonces al poner

SendClientMessage(playerid, 0, "Hola");

es como poner

SendClientMessage(playerid, 0xFF, "Hola");

[Nota: Depende de la "base" en que se aplica, en 0xFF seria base 16]

pero tomando en cuenta para formar y utilizar el RGB (A) se usa 0xFF..FF..FF.FF y se crea el blanco, no son ID, puedes tomarlo asi si lo tienes con DEFINE pero se llaman MACROS

#define COLOR_BLANCO (0xFFFFFFFF)

y SendClientMessage(playerid, COLOR_BLANCO, "hola");

El RGBA sin hexadecimales es ejemplo ->

R = 255 = Su expresion del rojo
B = 255 = Maxima expresion del azul
G = 255 = Maxima expresion del verde

entonces al crear una combinacion entre ellos se crean otros colores

en RGB no hay mas que 255, porque? es un numero "magico" en las computadoras y es el maximo valor que se puede representar en un numero binario de ocho dнgitos (por un byte de 8 bits sin signo (octeto))

Igualmente, el hecho de conocer los binarios no implica una dificultad, hay numerosas herramientas en todo Internet para sacar los colores hexadecimales [en html te lo podrias ver asi -> #FFFFFF y lo pasarias al PAWN en un octeto quitandole el FFFFFF y dejandole asi -> 0xFFFFFFFF ya el ultimo seria una transparencia..

Pero tambien hay herramientas para sacar estos [https://sampforum.blast.hk/showthread.php?pid=3403146#pid3403146]


Respuesta: Dudas sobre colores - Guss - 20.05.2015

Creo que me han entendido mal o yo no estoy captando bien.

En mi servidor usan el comando /color para elegir un color, este comando puede ser usado asн: /color azul.
Cuando un jugador entra al servidor el color que se le da es el blanco, este cambia cuando se usa el comando /color y nada mбs. Hay un mensaje que da la victoria de algъn jugador en un test de reacciуn pero este mensaje se muestra de un mismo color en su totalidad, el que yo haya elegido en SendClientMessage, sй como cambiar el color, no se confundan. Lo que quiero es que en este caso:

Guss ha ganado el test de reacciуn

Quiero que el color del nombre del jugador se muestre con el color que lleva el jugador en ese momento, si voy de rojo:

Guss ha ganado el test de reacciуn

O si luego decido cambiarme al color amarillo y vuelvo a ganar el test, el mensaje se muestre con mi nombre en su color actual.

Me han entendido ahora?


Respuesta: Dudas sobre colores - Goncho28 - 20.05.2015

їLeнste lo que te puse siquiera?


format(string, sizeof(string), "(( %s {3ADF00} ha ganado el test de reacciуn))", Nombre(playerid)(params[0]));
Mensaje(i, 0xFF8000FF, string);

Lo que estб en rojo es el color del jugador, lo que estб en negrita el color del resto del mensaje... tenes que usar el GetPlayerColor y usarlo abajo, no te darй el cуdigo completo, eso no te hace aprender.

Tienes mбs colores como el de negrita aquн

http://html-color-codes.info/codigos...hexadecimales/

Solo elegн un color, quita el hashtag (#) y pon las llaves.


Respuesta: Dudas sobre colores - Zume - 20.05.2015

PHP код:
enum Colors
{
    
cName[32],
    
cValue
};
new 
ColorsData[][Colors] = {
    {
"Rojo"0xFFFFFFFF},
    {
"Azul"0xFFFFFFFF},
    {
"Verde"0xFFFFFFFF},
    {
"Negro"0xFFFFFFFF}
};
COMMAND:colores(playeridparams[])
{
    new
        
str[128];
    
SendClientMessage(playerid, -1"____/ Colores disponibles /____");
    for(new 
i!= sizeof(ColorsData); i++)
    {
        if(
strlen(str) < 128-9)
        {
            
format(strsizeof str"%s, "ColorsData[i][cName]);
        }
        else
        {
            
SendClientMessage(playerid, -1"COLORES: %s"str);
            
str[0] = '\0';
        }
    }
    return 
1;
}
COMMAND:color(playeridparams[])
{
    new
        
id;
    if(
isnull(params))
        return 
SendClientMessage(playerid, -1"/color [nombre del color]");
    if((
id GetColorIDFromName(params))) == -1)
        return 
SendClientMessage(playerid, -1"Color inexistente! /colores.");
    
SetPlayerColor(playeridColorsData[id][cValue]);
    new
        
str[32];
    
format(strsizeof str"Tu color en el nombre es ahora el %s"ColorsData[id][cName]);
    
SendClientMessage(playerid, -1str);
    return 
1;
}
stock GetColorIDFromName(name[])
{
    for(new 
i!= sizeof(ColorsData); i++)
    {
        if(
strcmp(ColorsData[i][cName], namefalse) == 0)
        {
            return 
i;
        }
    }
    return -
1;
}
/* Obtiene el {FFFFFF} de 0xFFFFFFFF */
stock GetHex8ColorFromString(color[])
{
    new
        
color[16];
    
format(colorsizeof color"%06x"color >>> 8);
    return 
color;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    
// puede ser asi ->
    
new
        
str[32];
    
format(strsizeof str"{%s}ID %d ha tenido la virtud de morir gracias a {%s}ID %d"GetHex8ColorFromString(GetPlayerColor(playerid)), playeridGetHex8ColorFromString(GetPlayerColor(killerid)), killerid);
    
SendClientMessageToAll(-1str);
    return 
1;

podria ser asi, o hacer que se almacene en una variable un ID, ejemplo, la variable new pColor[MAX_PLAYERS]; y al establecerse un color almacene el INDEX del array colores del color que se puso, y asi obtenerlo, hay formas mas faciles, como poniendo el cValue en el color y luego un {FFFFFF} o el color, pero eso depende de la estructura del mensaje


Respuesta: Dudas sobre colores - Guss - 20.05.2015

Gracias a los dos, sin embargo aun tengo una curiosidad... me ha quedado esto asн:

format(string, sizeof(string), "%s {color restante}ha ganado el test de reacciуn", nombre );
SendClientMessageToAll(GetPlayerColor(playerid), string)

De maravilla porque el nombre justo va primero, pero si tuviera esto...?

El jugador Guss ha ganado el test de reacciуn

Queriendo que solo Guss sea lo que obtiene el color y el resto debe ser verde. їComo harнa en ese caso?

PD: _Zume gracias por el cуdigo pero si me lo pudieras explicar serнa mucho mejor


Respuesta: Dudas sobre colores - Zume - 20.05.2015

A eso me referia con lo que puse al final, todo el codigo esta basado a el "que pasaria" que pones

Quote:
Originally Posted by _Zume
Посмотреть сообщение
como poniendo el cValue en el color y luego un {FFFFFF} o el color, pero eso depende de la estructura del mensaje
PHP код:
enum Colors
{
    
cName[32],
    
cValue
};
new 
ColorsData[][Colors] = {
    {
"Rojo"0xFFFFFFFF},
    {
"Azul"0xFFFFFFFF},
    {
"Verde"0xFFFFFFFF},
    {
"Negro"0xFFFFFFFF}
}; 
Definimos el enumerador de los valores del array, y en el new se establecen de forma estatica.

PHP код:
COMMAND:colores(playeridparams[])
{
    new
        
str[128];
    
SendClientMessage(playerid, -1"____/ Colores disponibles /____");
    for(new 
i!= sizeof(ColorsData); i++)
    {
        if(
strlen(str) < 128-9)
        {
            
format(strsizeof str"%s, "ColorsData[i][cName]);
        }
        else
        {
            
SendClientMessage(playerid, -1"COLORES: %s"str);
            
str[0] = '\0';
        }
    }
    return 
1;

primero, se comprueba si ingreso un color [/color ] es nulo, o lo tomaria pero buscaria si existe el color. [/color azul] si lo vale.

PHP код:
    if((id GetColorIDFromName(params))) == -1// en el que te pase cambia != por ==
        
return SendClientMessage(playerid, -1"Color inexistente! /colores."); 
en la condicion [if] se almacena en la variable [id] el valor del INDEX en donde se encuentra el valor de color del color que se busca establecer, luego, si [id] retorna -1 es por que el color no existe.

PHP код:
    SetPlayerColor(playeridColorsData[id][cValue]); 
establece al jugador el color del INDEX que se encontro con el nombre de color.

PHP код:
    new
        
str[32];
    
format(strsizeof str"Tu color en el nombre es ahora el %s"ColorsData[id][cName]);
    
SendClientMessage(playerid, -1str); 
Retorna el nombre del color que se establecio.

PHP код:
COMMAND:colores(playeridparams[]) 

    new 
        
str[128]; 
    
SendClientMessage(playerid, -1"____/ Colores disponibles /____"); 
    for(new 
i!= sizeof(ColorsData); i++) 
    { 
        if(
strlen(str) < 128-9
        { 
            
format(strsizeof str"%s, "ColorsData[i][cName]); 
        } 
        else 
        { 
            
SendClientMessage(playerid, -1"COLORES: %s"str); 
            
str[0] = '\0'
        } 
    } 
    return 
1

aca se hace algo muy simple, se envia el mensaje de colores de la forma siguiente ->

PHP код:
for(new i!= sizeof(ColorsData); i++) 
inicia un ciclo por el tamaсo del array ColorsData

PHP код:
if(strlen(str) < 128-9)
        {
            
format(strsizeof str"%s, "ColorsData[i][cName]);
        }
        else
        {
            
SendClientMessage(playerid, -1"COLORES: %s"str);
            
str[0] = '\0';
        } 
se revisa si [str] ya lleno sus celdas, si el string tiene un valor contando sus caracteres de 128 [maximo de caracteres para el chat] -9 [el que usa la palabra "COLORES: ", entonces almacena en [str] el valor anterior que tenia para asi no perderlo y no usar strcat, y el nombre del color separandolo por una coma para que salga en una linea, si hay demasiados colores entonces envia el mensaje y vacia el string para que agregue los anteriores y comience un nuevo ciclo para enviar otra linea..

PHP код:

stock GetColorIDFromName
(name[])
{
    for(new 
i!= sizeof(ColorsData); i++)
    {
        if(
strcmp(ColorsData[i][cName], namefalse) == 0)
        {
            return 
i;
        }
    }
    return -
1;

lo del ciclo por todos los index del array.. y comprobando el ID que tiene el nombre que se busca, si no se encuentra retorna -1 [esto, porque el index puede ser 0 y puede confundirse ..]

PHP код:
stock GetHex8ColorFromString(color[])
{
    new
        
color[16];
    
format(colorsizeof color"%06x"color >>> 8);
    return 
color;

movemos el puntero para obtener los 6 caracteres del hexadecimal en un redondeo, ejemplo -> %.2f muestra de 145.2353 solo -> 145.23, entonces nos vamos tomando en cuenta lo de el base de 8 bits y asi obteniendo los valores, si quisieras mostrar el HEX en octeto seria: 0x%06xFF.", color >>> 8


Respuesta: Dudas sobre colores - DesingMyCry - 20.05.2015

Deja... yo te explico.

SA-MP, nativamente asigna un color automбtico al jugador que se conecta. Sin embargo, este color no se puede obtener con "GetPlayerColor" (siempre mostrarб 0). Entonces para solucionar esto, se le asigna un color con "SetPlayerColor"...

Como deberias saber, los colores en SA-MP son nъmeros hexadecimales, y estos hexadecimales representan a un nъmero decimal (que van desde 0 a 9). En otras palabras, como dijo alguien por arriba, cada vez que haces esto:

pawn Код:
SendClientMessage(jugadorid, 0x0000AFFF, "Mensaje.");
Es como hacer:
pawn Код:
SendClientMessage(jugadorid, 45055, "Mensaje.");
Ya que el compilador transforma a decimal todos los nъmeros hexadecimales encontrados (de hecho, tambiйn los binarios).

Ahora, cual es el problema? La funciуn "SendClientMessage" (entre otras) solo permiten el uso de colores hexadecimales. Osea que:


pawn Код:
SendClientMessage(jugadorid, 0, "Mensaje {0000AF}con color.");
No es lo mismo a:
pawn Код:
SendClientMessage(jugadorid, 0x0, "Mensaje {45055}con color.");
La soluciуn? Ocupar el especificador para hexadecimales "%x". Este especificador transformarб el nъmero 45055 al hexadecimal correspondiente 0x0000AFFF para poder ser usado en la funciуn de nuestra prueba. Como?

pawn Код:
format(tmp, sizeof tmp, "El jugador {%06x}%s {FFFFFF}con ID {%06x}%d {FFFFFF}se autofirmу la playera.",
color >>> 8, nombre, color >>> 8, jugadorid);



Respuesta: Dudas sobre colores - Guss - 20.05.2015

Gracias de nuevo, ya pude entender