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
-
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.
-
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 ;)
++
-
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.
-
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 ;)
-
Mais si mes véhicules ne sont pas static (qu'il ne garde pas leur id tout le temps) ?
-
c'est pas grave c'est juste pour generé le code de demarrage au joueur
-
Le nombre ne sera jamais pareil ?
-
exactement
-
Merci :)
-
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++
-
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 ;)
-
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.
-
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.