RE: Armazenar cores HEX em MySQL - leonardos08bt - 02/10/2023
(27/09/2023 21:11)MateusCandido Escreveu: (27/09/2023 11:45)pushline Escreveu: Pelo o que vejo nisso não tem nada de errado... Como você tá salvando esse color[playerid] ?
Esse seu código deveria se transformar nisso: (se estiver correto o método de salvamento)
Código PHP: format(string, sizeof(string), "{%06x}Mensagem!", 0x0080FFFF >>> 8);
Se você salvar o hexadecimal com o alpha no final (os dois últimos números), não precisará usar o setalpha para transformá-lo em hexadecimal, pois seria a mesma coisa em sistemas diferentes (decimal e hexadecimal). Você só precisaria usá-la se precisasse alterar o alpha do hexadecimal. Em outras palavras, a função que forneci raramente pode ser usada.
Se você salvar o hexadecimal sem o alpha (por exemplo, 0xAABBCC), poderá usá-lo em strings normais e, em SendClientMessage, ele terá o alpha bugado no final (0x00AABBCC).
O motivo do bug é porque você está tentando passar a cor em um formato inválido, como se você tivesse uma cor RGB, mas a função espera RGBA ou ARGB, portanto, ela supõe que, se for RGBA, R é 0 ou A é 0
Para resolver isso, você poderia fazer o seguinte:
- "0xAABBCC << 8" para gerar um 00 no final
- Poderia usar SetAlpha antes de usar a cor no SendClientMessage.
Estou salvando da seguinte forma:
Código PHP: mysql_format(connect, query, sizeof(query), "UPDATE `contas` SET `cor` = %d WHERE `nome` = '%e'", color[playerid], nome[playerid]); mysql_pquery(connect, query);
Porém quando insiro a cor "0x0080FFFF" o mysql ignora as letras deixando apenas o 0080.
A coluna "cor" criei no formato INT do mysql como disse
Seria melhor salvar a cor usando varchar.
( '%e' - varchar(10) )
RE: Armazenar cores HEX em MySQL - MateusCandido - 04/10/2023
(02/10/2023 11:16)pushline Escreveu: Eu sei mano, eu quero saber como que você tá criando a variável.
Foi o que eu disse '-' , estou criando ela normal, sem nenhuma tag:
RE: Armazenar cores HEX em MySQL - PT_Player - 04/10/2023
Cara
O exemplo que o nosso amigo le deu e um numero nao uma string....
use;
seu code
Código: //0x0080FFFF - cor de exemplo
new string[64];
format(string, sizeof(string), "{%06x}Mensagem!", color>>>8);
mysql_format(connect, query, sizeof(query), "UPDATE `contas` SET `cor` = %e WHERE `nome` = '%e'", color, nome[playerid]);
mysql_pquery(connect, query);
e se quer usar por playerid algo assim:
Código: SetAlpha(color, alpha)
{
return color & ~0xFF | clamp(alpha, 0, 255);
}
new colorsql, color[MAX_PLAYERS], string[64];
cache_get_value_int(0, "colordosql", colorsql);
color[playerid] = SetAlpha(colorsql, 75);
format(string, sizeof(string), "{%06x}Mensagem!", color[playerid]>>>8);
RE: Armazenar cores HEX em MySQL - pushline - 05/10/2023
(04/10/2023 20:05)PT_Player Escreveu: Cara
O exemplo que o nosso amigo le deu e um numero nao uma string....
use;
seu code
Código: //0x0080FFFF - cor de exemplo
new string[64];
format(string, sizeof(string), "{%06x}Mensagem!", color>>>8);
mysql_format(connect, query, sizeof(query), "UPDATE `contas` SET `cor` = %e WHERE `nome` = '%e'", color, nome[playerid]);
mysql_pquery(connect, query);
e se quer usar por playerid algo assim:
Código: SetAlpha(color, alpha)
{
return color & ~0xFF | clamp(alpha, 0, 255);
}
new colorsql, color[MAX_PLAYERS], string[64];
cache_get_value_int(0, "colordosql", colorsql);
color[playerid] = SetAlpha(colorsql, 75);
format(string, sizeof(string), "{%06x}Mensagem!", color[playerid]>>>8);
Nem precisa ser %e pra salvar a cor, se for %d (decimal), funciona tbm. É esse método que eu faço pra colocar cores nas minha gangzones.
RE: Armazenar cores HEX em MySQL - MateusCandido - 05/10/2023
(04/10/2023 20:05)PT_Player Escreveu: Cara
O exemplo que o nosso amigo le deu e um numero nao uma string....
use;
seu code
Código: //0x0080FFFF - cor de exemplo
new string[64];
format(string, sizeof(string), "{%06x}Mensagem!", color>>>8);
mysql_format(connect, query, sizeof(query), "UPDATE `contas` SET `cor` = %e WHERE `nome` = '%e'", color, nome[playerid]);
mysql_pquery(connect, query);
e se quer usar por playerid algo assim:
Código: SetAlpha(color, alpha)
{
return color & ~0xFF | clamp(alpha, 0, 255);
}
new colorsql, color[MAX_PLAYERS], string[64];
cache_get_value_int(0, "colordosql", colorsql);
color[playerid] = SetAlpha(colorsql, 75);
format(string, sizeof(string), "{%06x}Mensagem!", color[playerid]>>>8);
Como eu faria para um jogador inserir esta cor em um DIALOG_INPUT e a cor ser armazenada nessa variavel "color[playerid]" para depois armazenar no MySQL?
Se eu uso "color[playerid] = strval(inputtex);" a cor que vai pro MySQL usando o exemplo é a 8000, porém na hora de carregar a cor as letras da string ficam todas pretas.
O código esta exatamente igual acima
RE: Armazenar cores HEX em MySQL - pushline - 06/10/2023
Código PHP: case dialog_hex: { if(!response) return 0;
if(strlen(inputtext) < 8 || strlen(inputtext) > 8) return SendClientMessage(playerid, -1, "msg 1");
if(!IsHex(inputtext)) // IsHex existe no y_utils do YSI Includes, e caso você inclua qualquer coisa de YSI, já vai existir por padrão no seu código. E caso você não use YSI, tem uma função abaixo pra você adicionar no seu código return SendClientMessage(playerid, -1, "msg 2"); strtoupper(inputtext); color[playerid] = HexToInt(inputtext);
return true; }
HexToInt(const str[]) { new ret; unformat(str, "x", ret); return ret; }
strtoupper(const string[]) { new upperString[256]; for (new character = 0; character < strlen(string); character++) { upperString[character] = toupper(string[character]); } return upperString; }
stock IsHex(str[]) { new i, cur; if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) i = 2;
while (str[i]) { cur = str[i++]; if (!(('0' <= cur <= '9') || ('A' <= cur <= 'F') || ('a' <= cur <= 'f'))) return 0; } return 1; }
RE: Armazenar cores HEX em MySQL - MateusCandido - 07/10/2023
(06/10/2023 11:13)pushline Escreveu: Código PHP: case dialog_hex: { if(!response) return 0;
if(strlen(inputtext) < 8 || strlen(inputtext) > 8) return SendClientMessage(playerid, -1, "msg 1");
if(!IsHex(inputtext)) // IsHex existe no y_utils do YSI Includes, e caso você inclua qualquer coisa de YSI, já vai existir por padrão no seu código. E caso você não use YSI, tem uma função abaixo pra você adicionar no seu código return SendClientMessage(playerid, -1, "msg 2"); strtoupper(inputtext); color[playerid] = HexToInt(inputtext);
return true; }
HexToInt(const str[]) { new ret; unformat(str, "x", ret); return ret; }
strtoupper(const string[]) { new upperString[256]; for (new character = 0; character < strlen(string); character++) { upperString[character] = toupper(string[character]); } return upperString; }
stock IsHex(str[]) { new i, cur; if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) i = 2;
while (str[i]) { cur = str[i++]; if (!(('0' <= cur <= '9') || ('A' <= cur <= 'F') || ('a' <= cur <= 'f'))) return 0; } return 1; }
Finalmente deu certo, o problema estava nessa conversão do dialog para salvar no MySQL.
Muito obrigado!
|