GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Mr_C30 le 26 Septembre 2009, 13:30:33
-
salut il y a quelque temp javais vue un fonction qui perméter de convertire une coueleur en décimale j'en aurai besoins car je narive pas a faire cela
format(unlimited, sizeof(unlimited), "%d%d%d", col1, col2, col3);
SetPlayerColor(playerid, unlimited);
ou si vous avez une autre solution .....
mercie a ++ :)
-
La couleur que tu veux convertir est en HEXA ?
++
FS'
-
format(unlimited, sizeof(unlimited), "%d%d%dAA", col1, col2, col3);
je supose pour une commande qui changerais la couleur du pseudo
-
Oui mais voir sa question il faut d'abord savoir l'origine de sa couleur pour pouvoir la convertir en décimal
On peux pas convertir a partir de rien ..
PS : Il faudrait savoir d'abord s'il ne sait pas tromper dans sa question , parceque je trouve sa louche
++
FS'
-
donc voila pour fusion
new col1 = 155;
new col2 = 40;
new col3 = 50;
format(unlimited, sizeof(unlimited), "0x%d%d%dAA", col1, col2, col3);
SetPlayerColor(playerid, unlimited);
le pprobléme c'est que j'ai un argument type mismatch (argument 2)
et surtout que la chaine n'est pas en décimal :/
++
-
faudrat demande a syg lui il las fait sur lalu =)
-
en gros je lui est dit de faire comme ceci mais franchement je ne sais pas
new col1 = 255;
new col2 = 126;
new col3 =0;
new colodeci = col1 && col2 && col3;
SetPlayerColor(playerid, colodeci);
voila sa compile mais franchement je n'est pas tester cette reponse je lui est donner par msn mais je ne sais pas si elle est fonctionnelle.
a vrai dire /color bleu par exemple serais telement plus simple avec un switch est hop
-
faites comme ca
new id1 = 255000000;
new id2 = 125000;
new id3 = 150;
new result = id1+id2+id3;
SetPlayerColor(playerid,result);
j ai pas test mais je pense que c' est bon
-
j'y est penser mais je pense que c'est pour une commande du genre
/nickcolor 255 255 255
donc au final ce seras intepetrer 765
-
faites comme ca
new id1 = 255000000;
new id2 = 125000;
new id3 = 150;
new result = id1+id2+id3;
SetPlayerColor(playerid,result);
j ai pas test mais je pense que c' est bon
lol mais bon on c'est jamais je go test ^^
et j'edit :P
edit:
enfaite j'ai esaye secis
new col = 2551001000;
SetPlayerColor(playerid, col);
se qui ma donner une couleur rouge / bordeux
donc si je fait ta solution elle devrai marcher ( logiquement)
j'y est penser mais je pense que c'est pour une commande du genre
/nickcolor 255 255 255
donc au final ce seras intepetrer 765
pas forcément si je multiplie le premier "col1" par 1000000 ( sil est inférieur a 99 par 100000 et inférieur a 9 10000)
ainsi de suite
je posterais la commande si ji arive :P
++ :)
-
yep tu a juste a multiplier
j pensais que vous avez comrpis
-
oui mais si je multiplie disons 80 par 1000000 = 80000000 mais comen ajouter un zero devan le 8 car sinon sa me compteras toujour 800 ^^
++
-
Salut,
hélas, la solution est légèrement plus compliqué, il faut utiliser un opérateur moins connu, le left shit (<<)
je donne un exemple, une petite fonction pour convertir un nombre en hexadécimale (en texte) en sa valeur:
stock strhex(string[])//par sim (légèrement inspiré de la fonction de Y_LESS)
{
new retour = 0, idx = 0;
if((idx = strfind(string, "0x", true)) != -1)
{
idx+=2;
while(string[idx] >= '0' && string[idx] <= 'F')
{
switch(string[idx])
{
case '0'..'9':
{
retour <<= 4;
retour += string[idx] - '0';
}
case 'a'..'f','A'..'F':
{
retour <<= 4;
retour += (string[idx]|0x20) - 'a' +10;
}
default:
{
break;
}
}
idx++;
}
}
printf("return value: %d (%x)", retour, retour);
return retour;
}
donc on envoie utilise comme ceci:
blanc = strhex("0xFFFFFFFF");
donc maintenant dans ton cas, tu récupère les trois composantes, puis tu fais un truc de ce genre:
new color = composante1;
color <<= 8;//correspond à la taille d'une composante, 8 bit
color += composante2;
color <<= 8;
color += composante3;
++Sim++
-
hum ok je vais observer secis mercie :)
++
edit ok mercie beaucoup sim
voicie la commande /ncol comme promit qui permet de choisir la couleur de son pseudo
if(strcmp(cmd, "/ncol", true) == 0)
{
if(logged[playerid] == 1)
{
tmp = strtokgp(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_SYSTEM, "/ncol [Rouge 0/255] [Vert 0/255] [Bleu 0/255]");
return 1;
}
new col1;
col1 = strval(tmp);
if(col1 < 0 || col1 > 255) { SendClientMessage(playerid, COLOR_ORANGE, "Coueleur 1 Invalide!"); return 1; }
tmp = strtokgp(cmdtext, idx);
n1[playerid] = col1;
new col2;
col2 = strval(tmp);
if(col2 < 0 || col2 > 255) { SendClientMessage(playerid, COLOR_ORANGE, "Couleur 2 Invalide!"); return 1; }
tmp = strtokgp(cmdtext, idx);
n2[playerid] = col2;
new col3;
col3 = strval(tmp);
if(col3 < 0 || col3 > 255) { SendClientMessage(playerid, COLOR_ORANGE, "Couleur 3 Invalide!"); return 1; }
n3[playerid] = col3;
format(unlimited, sizeof(unlimited), "%s voicie vos Couleurs NCOL R:%d G:%d B:%d!", name[playerid], col1, col2, col3);
SendClientMessage(playerid, COLOR_ORANGE, unlimited);
new color = col1;
color <<= 8;//By sim
color += col2;
color <<= 8;
color += col3;
color <<= 8;
SetPlayerColor(playerid, color);
}
else
{
format(unlimited, sizeof(unlimited), "%s Vous devez être loger !", name[playerid]);
SendClientMessage(playerid, COLOR_ORANGE, unlimited);
}
return 1;
}
voila a vous de jouer avec les variables ^^
++ :)