20.05.2015, 01:15
A eso me referia con lo que puse al final, todo el codigo esta basado a el "que pasaria" que pones
Definimos el enumerador de los valores del array, y en el new se establecen de forma estatica.
primero, se comprueba si ingreso un color [/color ] es nulo, o lo tomaria pero buscaria si existe el color. [/color azul] si lo vale.
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.
establece al jugador el color del INDEX que se encontro con el nombre de color.
Retorna el nombre del color que se establecio.
aca se hace algo muy simple, se envia el mensaje de colores de la forma siguiente ->
inicia un ciclo por el tamaсo del array ColorsData
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..
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 ..]
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
Quote:
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}
};
PHP код:
COMMAND:colores(playerid, params[])
{
new
str[128];
SendClientMessage(playerid, -1, "____/ Colores disponibles /____");
for(new i; i != sizeof(ColorsData); i++)
{
if(strlen(str) < 128-9)
{
format(str, sizeof str, "%s, ", ColorsData[i][cName]);
}
else
{
SendClientMessage(playerid, -1, "COLORES: %s", str);
str[0] = '\0';
}
}
return 1;
}
PHP код:
if((id = GetColorIDFromName(params))) == -1) // en el que te pase cambia != por ==
return SendClientMessage(playerid, -1, "Color inexistente! /colores.");
PHP код:
SetPlayerColor(playerid, ColorsData[id][cValue]);
PHP код:
new
str[32];
format(str, sizeof str, "Tu color en el nombre es ahora el %s", ColorsData[id][cName]);
SendClientMessage(playerid, -1, str);
PHP код:
COMMAND:colores(playerid, params[])
{
new
str[128];
SendClientMessage(playerid, -1, "____/ Colores disponibles /____");
for(new i; i != sizeof(ColorsData); i++)
{
if(strlen(str) < 128-9)
{
format(str, sizeof str, "%s, ", ColorsData[i][cName]);
}
else
{
SendClientMessage(playerid, -1, "COLORES: %s", str);
str[0] = '\0';
}
}
return 1;
}
PHP код:
for(new i; i != sizeof(ColorsData); i++)
PHP код:
if(strlen(str) < 128-9)
{
format(str, sizeof str, "%s, ", ColorsData[i][cName]);
}
else
{
SendClientMessage(playerid, -1, "COLORES: %s", str);
str[0] = '\0';
}
PHP код:
stock GetColorIDFromName(name[])
{
for(new i; i != sizeof(ColorsData); i++)
{
if(strcmp(ColorsData[i][cName], name, false) == 0)
{
return i;
}
}
return -1;
}
PHP код:
stock GetHex8ColorFromString(color[])
{
new
color[16];
format(color, sizeof color, "%06x", color >>> 8);
return color;
}