La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 17:39:34
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
lylver Héros Messages: 274 |
Il y a un moment déjà j'ai pris connaissance de ceci
http://www.nwnlexicon.com/compiled/function.random.html Je m'en suis pas vraiment préoccupé jusqu'à ce que récemment nous rencontrions des problèmes sur la génération d'effets de météo aléatoire. Ceux-ci sont déclenchés au moment où les joueurs pénètrent dans certaines zones. Etant donné que le joueur n'a que peu d'intéraction sur ces évênements, il ne peut modifier leur cours, brisant une séquence pseudo-aléatoire en choisissant telle ou telle action. Les séquences pseudo-aléatoires se répètent identiquement en fonction de chaque joueur : c'est devenu génant au point qu'on me demande si c'était une animation fixe et qu'on me sorte le décompte des timings. J'ai un peu cherché sur IGNVault et j'ai trouvé quelques trucs compliqués dont je n'ai pu retrouver l'origine mathématique sérieuse. Je pense que certains se sont inspirés d'un brasseur(mélangeur) écrit en java mais ça m'a laissé perplexe. J'ai fouillé un peu et j'ai trouvé un classique que j'ai associé à une "graine" basée sur une des fonctions de temps pour le démarrage de la séquence. La fonction est rendu globale en utilisant une variable sur l'objet module, supprimant l'effet pervers de la réinitialisation de la graine à l'entrée de chaque zone et sa dépendance (à ce que j'ai compris) envers le personnage qui y entre. Peut-être pas top mais : elle est rapide, facile à implémenter. Elle retourne des nombres entiers sur l'intervalle [1,32767]. Si vous voulez vous en servir pour simuler des jets de dés, procédez ainsi : si Intervalle : [0,n-1] int nDice = FloatToInt(ParkMiller()*n/32768.0); Ca respectera assez fidèlement si on adapte la fonction et que les calculs sont faits sur des valeurs flottantes NWScript : //:: //// //:: Created Lylver 2006-05-06 //:: Custom random function //:: //// float ParkMiller(){ // Numbers will never need more than 32bits coding float fA = 16807.0 ; float fM = pow(2.0,31.0)-1 ; // hope it is 2147483647.0 float fQ = 127773.0; // m div a, precomputed float fR = 2836.0; // m mod a, precomputed object oMod = GetModule(); float fSeed = GetLocalFloat(oMod,"PARK_MILLER"); // if( fSeed == 0.0 ) fSeed = 2.0*GetTimeMillisecond()+1.0; // Critical function to ensure no overflow of 32bits coding // Exact decimals : not needed => because we trunc float fHi = IntToFloat(FloatToInt(fSeed/fQ)); // Trunc decimals. float fLo = fSeed - fQ * fHi; float fTest = fA * fLo - fR * fHi; float fResult; if( fTest > 0.0 ){ fResult = fTest; } else { fResult = fTest + fM; } SetLocalFloat(oMod,"PARK_MILLER",fResult); // to store permanently the exact Seed return fResult/pow(2.0,16.0); // limit to 15 bits } /* void main() { object oPC = GetLastUsedBy(); int n; for( n=0; n<1299; n++) ParkMiller(); SpeakString("Random number : "+FloatToString(ParkMille r())); } */ |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Tu es sur du comportement décrit par le lexicon ?
Je viens d'essayer un module avec une zone vide, aucun script sauf un sur le OnEnter qui envoie 5 Random(100) au joueur qui entre. En testant plusieurs fois avec le même joueur, je n'ai jamais eu de séries identiques. Pareil avec 2 zones vides avec un déclancheur pour les transitions. Enfin le système de Bioware m'a souvent paru étrange au niveau de l'aléatoire donc merci pour ta fonction, ça m'a l'air excellent. |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
J'ai rien comrpis au script, et c'est pour ça que je n'y toucherais pas. Enfin, ce qui me parait bizzar, c'est que moi, mes fonctions Random marche trés bien Donc je ne vois pas trop a quoi ça sert de faire un deuxieme random .
Aufaite juste pour info en passant ; regarde ton script cette ligne normalement for( n=0; n<1299; n++) ParkMiller(); elle bug, il y a quelque truc qui ce sont rajouter _________________ [http] |
Revenir en haut | |
lylver Héros Messages: 274 |
Je suis absolument pas sûr du lexicon, ca dépend des patch nwn en général (là c'est 1.61 pour la description).
Par contre : je suis sûr de ce que me décrive les joueurs, je vois pas pourquoi j'irais me fatiguer à chercher des solutions compliquées. BN : si t'es pas fichu de reconnaître des commentaires dans un script tu peux retourner dans ta localisation. Va flooder ailleurs. |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
|
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
On dirait bien oui... Je crois effectivement qu'il est inutile de faire un commentaire pour dire que tu ne comprends rien Black Knight. A part ça, prenez vos gouttes, respirez fort, et parlez plutôt de script (ce sujet-là est intéressant d'ailleurs !).
_________________ » Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine » 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Ok, donc la prochaine fois, j'éviterais de te dire l'erreur qu'il y a dans ton script, tiens la vla l'erreur de ton script :
for( n=0; n<1299; n++) ParkMiller(); maintenant regarde cette phrase avec le NWScript, ça evitera peut - être que l'editeur nous dise qu'il y a une erreur ... Bon bye ! _________________ [http] |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Mais de quoi tu parles enfin ???
1. La portion de code citée est en COMMENTAIRE, donc on se fiche de savoir si ça bug ou pas 2. Le soi-disant bug vient de la balise nwscript, on s'en doute bien 3. Le soi-disant bug n'a absolument rien à voir avec la question posée... Réfléchis à deux fois avant de poster plutôt que de dire n'importe quoi ! _________________ » Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine » 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Page 1 sur 1 ¤
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum