Portal SAMP
[Ajuda] Armazenar cores HEX em MySQL - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Armazenar cores HEX em MySQL (/showthread.php?tid=3964)

Páginas: 1 2


Armazenar cores HEX em MySQL - MateusCandido - 13/09/2023

Olá!
Gostaria de saber como faço para salvar cores HEX em uma database MySQL na seguinte forma:

1. Armazenar a cor HEX numa variavel própria;
2. Salvar a cor em uma tabela qualquer;
3. Carregar a cor da tabela em outra variavel;
4. Usar esta variavel em uma string.


RE: Armazenar cores HEX em MySQL - pushline - 15/09/2023

Você pode usar o tipo INT pra salvar, irá salvar em um método decimal, e para retornar em método HEX e em uma string é só usar essa função:

Código PHP:
SetAlpha(coloralpha)
{
  return color & ~0xFF clamp(alpha0255);
}

CorQueVemDoMySql SetAlpha(cor75); 



RE: Armazenar cores HEX em MySQL - MateusCandido - 21/09/2023

Poderia dar um exemplo?


RE: Armazenar cores HEX em MySQL - pushline - 22/09/2023

(21/09/2023 22:04)MateusCandido Escreveu: Poderia dar um exemplo?

Código PHP:
new color;
cache_get_value_int(0"colordosql"color);
color SetAlpha(color75);

new 
query[300];
// pode inserir como hex mesmo. o sql faz a conversão pra você, você só precisa setar como hexadecimal novamente no código (SetAlpha)
mysql_format(dbHandlequerysizeof(query), "INSERT INTO `tabela` (`color`) VALUES(%d)"color);
mysql_tquery(dbHandlequery); 



RE: Armazenar cores HEX em MySQL - MateusCandido - 22/09/2023

(22/09/2023 15:13)pushline Escreveu:
(21/09/2023 22:04)MateusCandido Escreveu: Poderia dar um exemplo?

Código PHP:
new color;
cache_get_value_int(0"colordosql"color);
color SetAlpha(color75);

new 
query[300];
// pode inserir como hex mesmo. o sql faz a conversão pra você, você só precisa setar como hexadecimal novamente no código (SetAlpha)
mysql_format(dbHandlequerysizeof(query), "INSERT INTO `tabela` (`color`) VALUES(%d)"color);
mysql_tquery(dbHandlequery); 
Estou fazendo exatamente isso, porém quando vou utilizar a cor em uma string ela fica preta:
Código PHP:
//0x0080FFFF - cor de exemplo

new string[64];
format(stringsizeof(string), "{%06x}Mensagem!"color[playerid]>>>8); 



RE: Armazenar cores HEX em MySQL - pushline - 27/09/2023

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(stringsizeof(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.


RE: Armazenar cores HEX em MySQL - MateusCandido - 27/09/2023

(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(stringsizeof(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(connectquerysizeof(query), "UPDATE `contas` SET `cor` = %d WHERE `nome` = '%e'"color[playerid], nome[playerid]);
mysql_pquery(connectquery); 

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


RE: Armazenar cores HEX em MySQL - pushline - 27/09/2023

Como que tu tá definindo a variável color ?

Eu fiz um teste aqui em um db local.

query - INSERT INTO `a`(`a`) VALUES (0x0080FFFF)
Pelas seguintes prints, o resultado com o seu valor hexadecimal deveria ficar deste jeito :

https://i.imgur.com/7P0ueOM.png
Acho que tem algo errado com seu color[playerid].


RE: Armazenar cores HEX em MySQL - MateusCandido - 30/09/2023

(27/09/2023 21:39)pushline Escreveu: Como que tu tá definindo a variável color ?

Eu fiz um teste aqui em um db local.

query - INSERT INTO `a`(`a`) VALUES (0x0080FFFF)
Pelas seguintes prints, o resultado com o seu valor hexadecimal deveria ficar deste jeito :

https://i.imgur.com/7P0ueOM.png
Acho que tem algo errado com seu color[playerid].

estou definindo ela normal, sem nenhuma tag:


RE: Armazenar cores HEX em MySQL - pushline - 02/10/2023

Eu sei mano, eu quero saber como que você tá criando a variável.