JeuxOnLineForumsPlusConnectés : 339 (sites) | 667 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Répondre
Partager Outils Rechercher
Avatar de Eclipse
Eclipse
Empereur / Impératrice
 
Avatar de Eclipse
 

Random ?

Es ce que quelqu'un sait comment fonctionne cette fonction ?

D'après mes tests, cette fonction n'est pas un vrai random.
Ou alors, je n'ai pas compris comment elle fonctionne.

Essayer ca sur un onenter d'une zone et vous serez surpris du résultat (c'est toujours la même valeur qui est renvoyée. Au mieux j'ai obtenue 4 valeurs différentes sur une trentaine de valeur).

object oPC = GetEnteringObject();
int iRandom = Random(101);
SendMessageToPC(oPC, IntToString(iRandom));


Apparement si l'on fait une action (boire une potion par exemple) avant d'entrer dans la zone la valeur change.
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
C'est un random tout ce qu'il y a de plus vrai. Le problème est toujours le même : comment les nombres aléatoires sont obtenus.

Ca m'est arrivé de constater que, lorsqu'on appelle plusieurs fois très rapidement cette fonction, il y a beaucoup de répétitons. Il n'y a pas vraiment de moyen d'y remédier, si ce n'est l'utiliser avec parcimonie et pas directement sur le OnEnter
Lien direct vers le message - Vieux
Avatar de Eclipse
Eclipse
Empereur / Impératrice
 
Avatar de Eclipse
 
Effectivement c'est le fait de mettre le random dans un onEnter qui perturbe le résultat.

Apparement le point de départ de l'horloge du random c'est le temps qui s'écoule depuis l'apparition d'un joueur dans la zone dans laquelle le script est appelé.

Puisque pour mon test je le met dans le onEnter, le temps de charger la zone varie peu et renvoie donc toujours la même valeur. (par contre le même script dans un onUse d'un objet fonctionne tres bien)

Voici une solution pour un random dans un onEnter, remplacer le random(101) par :
Code PHP:
int iRandom = (GetTimeMillisecond()+1)/10
Lien direct vers le message - Vieux
Avatar de Slay
Slay
Dauphin
 
Avatar de Slay
 
Une petite méthode de génération de nombres pseudo-aléatoire...
Avantage : tu ne générera pas le même nombre en rentrant sur une zone
Inconvenient : c'est une suite... donc a partir d'un nombre donné les nombres générés a la suite seront toujours les mêmes...
Mais c'est suffisant pour donner l'illusion d'une génération aléatoire dans la plupart des cas

Allez on commence :
D'abord créer un nouveau script, enlever la fonction main() et y mettre :

Code PHP:
int GetRandomint nNum )
{
int nSeed =  GetLocalInt(GetModule(), "Random_Seed");

//calculate new seed
nSeed = (nSeed 69) + 1;

string sSeed;

if ( 
nSeed 999 ){
    
sSeed IntToStringnSeed );
    
nSeed StringToInt(GetStringRightsSeed));
    }

SetLocalIntGetModule(), "Random_Seed"nSeed );

//generate the random number from seed
float fSeed IntToFloatnSeed );
float fNum IntToFloatnNum );

int nResult FloatToIntfSeed fNum 1000 );

return 
nResult;

Sauvegarder le tout sous le nom 'inc_random'.

deuxième étape, insérer dans le 'OnModuleLoad' la ligne suivante :
Code PHP:
SetLocalIntGetModule(), "Random_Seed"GetTimeMillisecond() ); 
et voila...

Maintenant, comment utiliser cette fonction :

au début du script ou tu veux l'utiliser, rajouter
Code PHP:
#include "inc_random" 
après tu peux utiliser la fonction GetRandom(X), ou X est un entier quelconque, et qui te renverra un entier pseudo-aléatoires compris entre 0 et X-1.

Voila, je sais pas si ça te sera utile, mais vu que j'ai trouvé amusant de bricoler ça, ce serait bête de pas en faire profiter tout le monde
Lien direct vers le message - Vieux
Avatar de Eclipse
Eclipse
Empereur / Impératrice
 
Avatar de Eclipse
 
Je viens juste d'éditer mon message précédent.

Ne t'inquiète pas, ce que tu donne la pourra toujours servir pour obtenir une valeur autre qu'un pourcentage (genre un random(361)).
Lien direct vers le message - Vieux
Avatar de Slay
Slay
Dauphin
 
Avatar de Slay
 
Le problème vois-tu, c'est que ta méthode a un défaut énorme : si tu appelles dans fonctions plusieurs fois dans la même seconde, tu vas obtenir une suite de nombres croissante...
La méthode que je te présente la, he bien... elle est très utilisée déjà... possible même que ce soit le genre de méthode utilisé quand tu programmes en C
Ce code est adapté du code source d'un autre jeu : Q3A...
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Random ?
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 01h22.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite