
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.







La date/heure actuelle est 05/08/2025 21:32:06
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 |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
Oki, merci L'erudit !
_________________ Aléthéia | Ceux qui cherchent la vie trouveront la mort, ceux qui cherchent la mort trouveront la mort |
Revenir en haut | ![]() ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
Hmmm...
Je suis pas convaincu que ça marche du tout (je sais je suis chiant ![]() D'une part : Citation : int h = GetTimeHour();
donc h est une entier entre 0 et 23 et i = 108000
int i = 30*3600; Si après tu fais : Citation : j = (18/i)- (h/i);
comme j est un entier, le moteur va arrondir à l'entier le plus proche soit 0 dans tous les cas.
La même chose se produit ensuite pour k. Donc tous tes DelayCommand ont de fortes chances de s'executer immédiatement. En fait, je pense qu'il faudrait aborder le problème différement et ne pas programmer l'ouverture de la porte par ce script. D'une part, mieux vaut réduire au maximum le nombre de DelayCommand, qui bouffent tous de la ressource, surtout si tu les programmes aussi longs. Ensuite, tu as déjà un script qui fait fermer la porte avec le tavernier, donc pour l'ouvrir vérifie juste si l'heure est bonne sur le OnFailedToOpen, si c'est ok dévérouille et c'est tout, sinon envoie un message. Ou place un trigger vers la porte qui fait la même chose, comme ça il n'y aura pas de latence, la porte sera trouvée ouverte ou fermée selon l'heure. par exemple : NWScript :
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. D'autre part, quand tu manipules les durées essaye de faire des trucs génériques que tu n'aies pas à changer si tu modifies l'écoulement du temps sur ton module. Utilises la fonction HoursToSeconds, elle est là pour ça. imaginons que tu veuilles compter le nombre de secondes avant une heure précise IG. D'abord, il faut récupérer l'heure du module. Et convertir GetTimeMinute et GetTimeSeconds en heures IG. NWScript :
float fHeureIG; int nHeure = GetTimeHour(); int nSeconds = GetTimeSecond(); int nMinute = GetTimeMinute(); fHeureIG = nHeure + (nMinute*60+nSeconds) / HoursToSeconds(1) avec ça, tu as une valeur float de l'heure comprises entre nHeure et nHeure+1. Maintenant, si tu veux déterminer le nombre de secondes (IRL) entre cette heure et une heire du jeu. NWScript :
float fHeurePrevue = 18.0; //(par exemple 18heures) float fHeureActuelle = fHeureIG float fNbSeconds = 0.0; if (fHeureActuelle > fHeurePrevue) fNbSeconds = ((24.0-fHeureActuelle)+fHeurePrevue)*HoursToSeconds(1); // la faut faire le tour de l'horloge else fNbSeconds = (fHeurePrevue-fHeureActuelle)*HoursToSeconds(1); et le tour est joué (je crois) |
Revenir en haut | ![]() ![]() ![]() |
L'Erudit Seigneur ![]() Messages: 167 |
En effet, ton idée paraît beaucoup plus appropriée, je vais corriger mon script, merci de l'aide
![]() J'aurais du regarder la fonction HoursToSecond ![]() EDIT: Citation : fHeureIG = nHeure + (nMinute*60+nSeconds) / HoursToSeconds(1) J'avoue ne pas avoir bien compris ce que tu voulais faire içi.
En partant de ce que je sais: HoursToSecond(1) donne 120 par défaut. nMinute*60 donne des secondes de jeu. Disons, que tu as précisément 1 heure et (30*60)+(30) secondes, c'est à dire qu'il est 1:30:30 InGame. Tu divises les secondes par 120: 1830/120, ton float égale donc 15.25. Auquel tu ajoutes nHeure, soit 1. fHeureIG égale donc 16.25, ce qui ne correspond pas du tout à la valeur que tu attends. Pour convertir un temps IG en des secondes IRL, voir ma fonction. Le HoursToSeconds requiert un entier pour le nombre d'heures, ce qui ne vous permet pas de prendre en compte les minutes, secondes et millisecondes. J'ai trouvé un script beaucoup plus simple pour l'ouverture/fermeture de la porte. Comme tu le dis, il suffit d'un trigger placé devant la porte ![]() ![]() |
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
Nan ! Les GetTimeMinute et GetTimeSecond donnent pas des valeurs de l'heure IG, mais le temps écoulé depuis le dernier changement d'heure (voir un de mes posts plus haut).
Donc si il est 15 heures (dans le jeu) et qu'il est 15 heures depuis mettons 1 minute et 30 seconde (IRL). Si une heure de jeu dure 2 minutes : HoursToSeconds(1) = 120 GetTimeHour = 15 GetTimeMinute = 1 GetTimeSecond = 30 ===> La fonction renvoie 15 + (1*60+30)/120 = 15.75 donc c'est ok Si une heure durait 5 minutes, HoursToSeconds = 300, la fonction donne 15+90/300 = 15.3. Et ensuite si tu veux mesurer le temps en secondes IRL avant 16 heures avec la fonction que j'ai mise fNbSeconds = (fHeurePrevue-fHeureActuelle)*HoursToSeconds(1); on a cas 1 : 16-15.75 * 120 = .25*120 = 30 secondes cas 2 : 16 - 15.3 * 300 = .7 * 300 = 210 = 3 minutes 30 secondes dans les 2 cas le résultat correspond bien à ce qu'on attend |
Revenir en haut | ![]() ![]() ![]() |


Page 2 sur 2 ¤ Aller à la page Précédente 1, 2
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