La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 13:52:37


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 10/02/2007 19:42:18 Sujet du message : [Anachronisme] Convertir une durée In Game en Seconde IRL

Bonjour à tous !

J'ai fait des courses de speeders pour mon module, et j'aimerai qu'il y ait un genre de compteur, qui donne aux joueurs leur temps.
J'ai trouvé différentes fonctions ici ou là, mais soit je les utilise mal, soit elles ne marchent pas :

Celle-ci de l'érudit.

NWScript :
// Convert an In-Game Time into an In-Real Life number of seconds
// - nHour: number of hours you want to convert
// nMinute: number of minutes you want to convert
// nSecond: number of seconds you want to convert
// nMillisecond: number of milliseconds you want to convert
// - nFirstRatio: default value (1h(IG)=2m(IRL))
// nSecondRatio: default value (1h(IG)=2m(IRL))
// nThirdRatio: default value (1h(IG)=2m(IRL))
float IGTimeToIRLSecond(int nHour, int nMinute, int nSecond=0, int nMillisecond=0, int nFirstRatio=120, int nSecondRatio=2, float nThirdRatio=0.000002f);

float IGTimeToIRLSecond(int nHour, int nMinute, int nSecond=0, int nMillisecond=0, int nFirstRatio=120, int nSecondRatio=2, float nThirdRatio=0.000002f)
{
float fIRLSecond = IntToFloat(nHour*nFirstRatio)
                  + IntToFloat(nMinute*nSecondRatio)
                  + IntToFloat(nSecond)
                  + IntToFloat(nMillisecond)*nThirdRatio;


    return fIRLSecond;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



Et celle là de Sith vicius :


NWScript :

///renvoie l'heure depuis l'heure 0
//en dizieme d'heure
int SvGetModuleTime();
int SvGetModuleTime()
{
    int nTime = GetTimeMinute()*60+GetTimeSecond();
    nTime = FloatToInt(nTime*10/HoursToSeconds(1)) ;
    nTime += GetTimeHour()*10;
    nTime += GetCalendarDay()*240;
    nTime += GetCalendarMonth()*28*240;
    nTime += GetCalendarYear()*12*28*240;
    return nTime; //en heures/10
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



Est-ce que quelqu'un aurait une idée sur la façon de procéder ?

Merci par avance ...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 15/02/2007 12:31:34 Sujet du message :

Salut Enki, félicitations pour la sortie de ton module (Drenark travaille avec toi, je crois Smile)

Lorsque j'ai créé cette fonction, c'était pour permettre de convertir un temps de jeu, en temps réel.
Par exemple, disons que 3 heures s'écoulant en jeu, représentent 1 heure réelle. Et bien, tu n'as qu'à utiliser la fonction pour convertir directement, sans faire de calculs (sauf si tu changes les valeurs par défaut).

Pour la fonction de Sith, on dirait qu'elle donne le temps écoulé depuis l'ouverture en ligne en 10éme d'heures.

Je crois que tu cherches plutôt à chronométrer le temps de course?
Pour cela il faudrait, plaçer quelques lignes de codes dans un script se délcenchant au départ, et un autre à l'arrivée.
Dans le premier, tu retires la valeur temps, dans le second également et tu fais la différence.
Ainsi, tu as un temps de parcours, et tu peux ensuite comparer les différents temps, voire les afficher à l'écran.

Tu peux même ajouter plusieurs déclencheurs, pour calculer des temps intermédiaires.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 15/02/2007 12:51:33 Sujet du message :

Salut L'Erudit et merci !
Oui, Je travaille bien avec Drenark ^^


Pour ce que tu proposes, c'est exactement ma démarche, à un point près.
Car le temps que compte le module (GetTimeHour();, GetTimeSecond();, etc ...) est en fait le temps In game.

Ma course se termine en moyenne entre 3 et 4 minutes IRL, ce qui fait qu'in Game, en utilisant simplement des marqueurs, j'ai à peu près ça : entre 1h30 et 2h00 de durée pour la course.
J'ai tenté de faire une fonction, pour convertir cette durée IG en durée IRL (secondes + millisecondes), mais j'ai des résultats irrationnel.
Je posterai ma fonction ainsi que mes tentatives d'explications, pour voir si tu ne peux pas me filer un coup de main Razz

Sinon, que deviens-tu ? Tu bosses sur CTM2 peut-être ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 15/02/2007 13:12:51 Sujet du message :

Non, je n'ai toujours pas acheté Nwn 2, et après les commentaires que j'ai lu Embarassed !

Je vois ce que tu veux dire. En fait tu voudrais des temps plus rationnels.
Ma fonction peut donc tout à fait te servir.

Sur Nwn 1, tu as peut-être compris en regardant la fonction qu'1heure IG, correspond à 2minutes IRL.
C'est à cela que servent les "ratio", à définir le rapport temps réel/temps de jeu.
Il faudrait déjà savoir si les valeurs par défaut sont donc changées par rapport à Nwn 1.

Après, pour utiliser la fonction, tu n'as qu'à calculer la différence temps d'arrivée/départ, en heure et minute du module (cf. post plus haut), puis tu utilises la fonction, qui convertira ces valeurs en temps réel: float IGTimeToIRLSecond(int nHour, int nMinute).
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 15/02/2007 13:23:53 Sujet du message :

J'avais essayé mais autrement (j'avais converti ma première mesure en utilisant ta fonction puis la deuxième et enfin, j'avais fait une soustraction) , c'est pourquoi cela n'avait peut-être pas marché ^^

Je te tiens au courrant pour voir ce que ça donne.

Au passage, si tu n'as rien de prévu ou en cours, ça te dirait de scripter des quêtes et autres pour Dark Time ? Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 15/02/2007 13:31:17 Sujet du message :

Ahaha, je ne refuse jamais d'aider, mais tu ne devrais pas trop compter sur moi, tu risques de voir tomber tes projets aux oubliettes Laughing !

Pour le script, effectivement fais la soustraction dabord, et convertit ensuite Smile !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
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


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 48.9ms