Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [Script] Une taverne avec des horaires d'ouverture
[Script] Une taverne avec des horaires d'ouverture
Par Daynos le 14/10/2002 à 14:51:01 (#2333442)
Bonjour.
Toujours pour tester l'API (les functions), j'ai imaginé faire une porte qui respecte des horaires d'ouverture !
ben oui, dans le jeu, les tavernes et maisons sont toujours ouvertes quelquesoit l'heure du jeu à laquelle vous passez ! (nuit, jour, tt le temps).
Bref, je me suis dit que dans un scenario, ça pourrait être sympa d'avoir une taverne (ou un autre lieu avec une porte) qui respecte des horaires d'ouverture.
Voici comment je fais.
a) je place une porte. Dans les proprietes de l'objet, onglet "basic" je coche plot (empêche le bash ?)
b) onglet lock, locked, can be relocked, key required. Pour le tag de la clef, j'indique un tag de clef qui n'existe pas!! :-)
c) dans l'onglet script je place le script suivant sur l'evt OnFailToOpen.
mon premier reflexe fut de le mettre sur onOpen, mais ça marche pas ! - Les scripts sont appelé quand l'evt s'est DEJA produit ! donc OnOpen, la porte est ouverte et s'est donc trop tard pour vérifier. En fait, il aurait fallu un onUse avec possibilité de "squizzer" l'action opendor demandée. Bref, c'est sur le OnFailToOpen qu'il faut agir.
C'est aussi pour cela qu'on utilise une clef sur la porte.
La porte est verrouillée, avec une clef qui n'existe pas ! c'est un "plot".
donc
pas de bash possible
pas de unlock possible.
Dès la premiere tentative d'utilisation, on tombe en OnFailToOpen
Voici le script qui est exécuté
/*----------------------------------------------------*/
/* Verification des horaires d'ouverture d'une porte */
/*----------------------------------------------------*/
void main()
{
int h1 = 10*60; // Heure d'ouverture en minutes 10h00
int h2 = 12*60+30; // 12h30
int h3 = 13*60+30; // 13h30
int h4 = 19*60; // 19h00 !
// calcul de l'heure actuelle en minute
int h = GetTimeHour()*60 + GetTimeMinute();
// verifie que c'est bien dans l'intervalle d'ouverture
int closed =( hh4 || ( h>h2 && h<h3) );
if (closed)
{
// pas de chance c'est ferme !
}
else
{
// deverouille la porte
SetLocked(OBJECT_SELF , FALSE);
// ouvre la porte
ActionOpenDoor(OBJECT_SELF);
// reverouille !
SetLocked(OBJECT_SELF , TRUE);
// demande a refermer dans 5 secondes
// j'ai verouille avant volontairement
DelayCommand(5.0f , ActionCloseDoor( OBJECT_SELF) );
}
}
Pour aider le joueur à comprendre ce qui se passe, juste à côté de laporte, je place une "pancarte" avec dans le champs description les horaires d'ouvertures de la porte ! :-)
Pancarte,
usable , plot , description = "Ouvert tous les jours de
10h00 à 12h30 et 13h30 à19h00"
Pour tester, voici un script à mettre sur le onUsed
void main()
{
int h = GetTimeHour();
int m = GetTimeMinute();
h=h+1;
SetTime( h , m , 1,1);
SpeakString("il est "+IntToString(h)+" heures et "+IntToString(m)+" minutes");
}
son but : faire avancer le temps plus vite !! :-) et vous afficher l'heure.
donc : click sur pancarte = j'avance le temps et ça me donne l'heure, examine pancarte = affichage de la description.
Si j'avais voulu faire une porte ouverte de 9h à 19h par exemple,
j'aurais mis
h1 = 9 , h2 =9, h3= 9 , h4 = 19 !
voila !
Have fun ..... :)
JOL Archives 1.0.1
@ JOL / JeuxOnLine