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

Titre: [RESOLU]couleur décimale
Posté 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 ++  :)
Titre: Re : couleur décimale
Posté par: FuSion le 26 Septembre 2009, 13:31:55
La couleur que tu veux convertir est en HEXA ?


++
FS'
Titre: Re : couleur décimale
Posté par: cristab le 26 Septembre 2009, 14:02:25
format(unlimited, sizeof(unlimited), "%d%d%dAA", col1, col2, col3);
je supose pour une commande qui changerais la couleur du pseudo
Titre: Re : couleur décimale
Posté par: FuSion le 26 Septembre 2009, 14:13:08
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'
Titre: Re : couleur décimale
Posté par: Mr_C30 le 26 Septembre 2009, 16:46:48
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 :/

++
Titre: Re : couleur décimale
Posté par: Ssk le 26 Septembre 2009, 18:39:14
faudrat demande a syg lui il las fait sur lalu =)
Titre: Re : couleur décimale
Posté par: cristab le 26 Septembre 2009, 19:10:20
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
Titre: Re : couleur décimale
Posté par: Ssk le 26 Septembre 2009, 19:19:32
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
Titre: Re : couleur décimale
Posté par: cristab le 26 Septembre 2009, 19:30:25
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


Titre: Re : Re : couleur décimale
Posté par: Mr_C30 le 26 Septembre 2009, 20:00:15
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



++ :)
Titre: Re : couleur décimale
Posté par: Ssk le 26 Septembre 2009, 20:56:19
yep tu a juste a multiplier

j pensais que vous avez comrpis
Titre: Re : couleur décimale
Posté par: Mr_C30 le 26 Septembre 2009, 20:59:49
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 ^^


++
Titre: Re : couleur décimale
Posté par: S!m le 26 Septembre 2009, 21:11:46
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++
Titre: Re : couleur décimale
Posté par: Mr_C30 le 26 Septembre 2009, 21:16:43
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 ^^


++ :)