GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: MrJunki le 10 Juillet 2011, 23:11:33

Titre: Question sur "random"
Posté par: MrJunki le 10 Juillet 2011, 23:11:33
Bonsoir,

J'aurai une question concernant "random", d'après ce que je sais et que j'ai compris random tire un nombre donner au hasard.
Ma question peut-on tirer ce nombre qu'une seule fois ? exemple

Dans random(899999); j'obtiens 48989, si la fonction est réutiliser comment peut-on faire pour ne pas ré-avoir 48989 ?
Ou existe t-il une autre fonction du même genre que celui-ci ?

Merci.

Titre: Re : Question sur "random"
Posté par: Gilux le 10 Juillet 2011, 23:27:53
Salut,

La variable à laquelle tu affectes ton random doit être locale, comme ça elle change à chaque fois (Car elle est détruite).

Après, en tout cas je ne sais pas si la valeur ne change pas (J'avais eu ce problème en VB quand j'ai commencé)

Si tu fais quelque chose de ce genre :


new random = 0;

CMD:randomnumber(playerid,params[])
{
     random = random(8999999);
     return 1;
}


la variable devrait changer à chaque fois que la commande est tapée  ;)

++
Titre: Re : Question sur "random"
Posté par: MrJunki le 10 Juillet 2011, 23:38:29
La random que je veut va être enregistrer dans les stats du joueur et sera la clef du véhicule.
Donc le joueur achète le véhicule et on lui donne la clef du véhicule qui sera un nombre aléatoire (exemple : random(89999)), c'est pour cela qu'il ne faut pas que le random ne sort pas un nombre qu'il a déjà sortit auparavant et je n'est pas la possibilité d'aller chercher les nombre qu'il a déjà sortit.
Titre: Re : Question sur "random"
Posté par: cristab le 10 Juillet 2011, 23:41:54
dans ce cas je voit ce que tu veut dire enfaite j'ai etait pris au meme probleme avec mon histoire de code ping pour mon fs de voiture enfaite voila ce que je te propose

printf("%d%d%d%d%d",random(9),random(9),random(9),random(9),vehicleid);

dans ce cas la tu n'auras jamais le meme numeros de serie ;)
Titre: Re : Question sur "random"
Posté par: MrJunki le 10 Juillet 2011, 23:50:41
Mais si mes véhicules ne sont pas static (qu'il ne garde pas leur id tout le temps) ?
Titre: Re : Question sur "random"
Posté par: cristab le 10 Juillet 2011, 23:55:51
c'est pas grave c'est juste pour generé le code de demarrage au joueur
Titre: Re : Question sur "random"
Posté par: MrJunki le 10 Juillet 2011, 23:59:05
Le nombre ne sera jamais pareil ?
Titre: Re : Question sur "random"
Posté par: cristab le 11 Juillet 2011, 00:03:19
exactement
Titre: Re : Question sur "random"
Posté par: MrJunki le 11 Juillet 2011, 00:08:35
Merci  :)
Titre: Re : Question sur "random"
Posté par: S!m le 11 Juillet 2011, 03:35:45
Salut,

je suis désolé, mais il ne faut jamais dire jamais, surtout dans ce cas ci!

un nombre choisi au hasard est un nombre choisi au hasard, et en tant que tel, un nombre pigé précédemment peut l'être de nouveau...

Pour éviter les répétitions, il te faudrait vérifier tous les numéros déjà sortis et les comparer avec la nouvelle valeur pour en être sur...calcul relativement long avec de grand volumes.

Tu pourrais simplement utiliser un nombre qui indique à quel ID tu est rendu et incrémenter le tout à chaque utilisation, ainsi tu aura des ID uniques sans trop de difficulté (tu commence à 0, puis tu monte à 1, puis 2 etc).

ps.
Même si deux véhicules avaient la même clef, es-ce très grave?
Un autre joueur n'a pas plus de chance de deviner ta clef, comment pourrait il le savoir?
Bref avec random(99999), tu ne devrais pas avoir trop de problèmes.

pps.
Utiliser plusieurs random comme cristab le suggère n'est pas mieux qu'un seul.
Que ce soit avec random(9) * 1000 + random(9) * 100 + random(9) * 10 + random(9) ou random(9999), les résultats devraient être très similaires.

++Sim++
Titre: Re : Question sur "random"
Posté par: cristab le 11 Juillet 2011, 10:22:18
regarde mieux mon printf enfaite car a la fin je met l'id du vehicule et la il ne peu pas y avoir deux fois la meme id ;)
Titre: Re : Question sur "random"
Posté par: Xartrick le 11 Juillet 2011, 17:03:14
Effectivement, je rejoins l'idée de Sim.
Il est effectivement mieux d'incrémenter un nombre choisie que de faire une génération de nombre aléatoire (qui n'est pas réellement aléatoire) et de comparer chaque résultat un à un.
Titre: Re : Question sur "random"
Posté par: MrJunki le 12 Juillet 2011, 23:43:06
Au final j'ai rajouter une variable qui s'appelle "DernierId Clef" et a chaque foi qu'une personne dois avoir sa clef je rajoute +1 a la variable, je donne la clef au joueur et je l'enregistre dans un fichier.

Merci de votre aide.