La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 29/04/2024 17:48:42


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
burning-angel
Novice
Inscrit le: 17 Juin 2007
Messages: 10
Répondre en citant
Posté le : 29/06/2007 16:04:00 Sujet du message : une serveuse dans une auberge, avec WP, pauses et dialogues

Salut à tous

Je viens de créé un script pour une serveuse dans une auberge pour y mettre un peu de vie avec 20 WP et quelques pseudos dialogues :

NWScript :

object oCurrent = GetObjectByTag( "Serveuse" );
void GoToWaypoint( int iNumber = 1 )
{
  string sNumber = IntToString(iNumber);
  object oWp = GetObjectByTag( "lcda_cerfgris_wp" + sNumber );
  ActionForceMoveToObject( oWp, FALSE );

  if(iNumber == 1)
  {
  ActionSpeakString("Puis-je vous servir quelques chose ?");
  ActionWait(6.0);
  ActionSpeakString("Entendu !");
  ActionWait(0.5);
  }

  if(iNumber == 4)
  {
  ActionSpeakString("Que puis-je vous servir ?");
  ActionWait(6.0);
  ActionSpeakString("");
  ActionWait(0.5);
  }

  if(iNumber == 11)
  {
  ActionSpeakString("");
  ActionWait(6.0);
  ActionSpeakString("Entendu !");
  ActionWait(0.5);
  }

  if(iNumber == 16)
  {
  ActionSpeakString("Que puis-je vous servir ?");
  ActionWait(6.0);
  ActionSpeakString("");
  ActionWait(0.5);
  }

  if(iNumber == 3 || iNumber == 10 || iNumber == 15 || iNumber == 20)
  {
  ActionSpeakString("Et voila...");
  ActionWait(8.0);
  }
}
void Patrol( int iWayPoints, int iTimes = 1, int iStart = 1 )
{
  // On decremente iTimes
  if ( iTimes > 0 )
    iTimes--;
  int i = iStart;
  while ( i <= iWayPoints )
  {
    GoToWaypoint( i );
    i++;
  }
  // Si l'objet peut encore faire un tour...
  if ( iTimes != 0 )
    Patrol( iWayPoints, iTimes, iStart );
  else
    GoToWaypoint( iStart );
}
void main()
{Patrol( 20, 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.


le problème :
ELLE NE FAIT RIEN ! elle ne bouge même pas ! pourtant j ai mis ce script dans son OnSpawn mais rien... si je vire les lignes avec les "ActionSpeakString" elle marche comme prévu et marque bien les pauses... mais pourquoi le texte bloc le script ?Mad

d avance merci pour l aide.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mythyzyn
Héros
Inscrit le: 23 Jan 2005
Messages: 292
Localisation: Lyncya
Répondre en citant
Posté le : 29/06/2007 17:15:07 Sujet du message :

Alors là, bonne question Confused

Sinon, test le script en le mettant sur OnPercepted.

Il marchera peut être et t'économisera qq ressources au passage (le PNJ n'a pas besoin d'agir si personne le voit vu que c'est pour mettre de l'animation).

Tu peux même rajouter un contrôle dans ton script pour vérifier si il y a des PJs dans la zone.

Si y'en a pas, elle s'arrête et reprendra son activité à la prochaine perception de PJ Wink
_________________
NwN2 - Lyncya 3 - La Guerre du Crystium
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 29/06/2007 18:12:34 Sujet du message :

C'est à cause de l'ActionSpeakString. Enfaite, ActionSpeakString renvoit donc sur l'action d'un objet, qui parlera. Le blême, c'est que tu mets ActionSpeakString comme ça ! Il faut pas.

AssignCommand(OBJECT_SELF, ActionSpeakString(""));

Essaie ça, ça devrait fonctionner.

BK
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
burning-angel
Novice
Inscrit le: 17 Juin 2007
Messages: 10
Répondre en citant
Posté le : 29/06/2007 18:48:50 Sujet du message :

Mythyzyn => malheureusement comme ca, elle recommancera son chemin du début a chaque fois, et ce n est pas souhaité

Black Knight => j ai testé, rien de plus, rien de moins, j ai toujours une statut bien immobile comme serveuse Surprised

avez-vous d autres idees s ils vous plaient ?
Dernière édition par burning-angel le 29/06/2007 19:03:08; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mythyzyn
Héros
Inscrit le: 23 Jan 2005
Messages: 292
Localisation: Lyncya
Répondre en citant
Posté le : 29/06/2007 18:59:16 Sujet du message :

Sauf si tu sauvegardes en variable local sur elle même le dernier WP et que tu définis le suivant à la reprise (Constante ?).

Après c'est à toi de voir Wink
_________________
NwN2 - Lyncya 3 - La Guerre du Crystium
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
burning-angel
Novice
Inscrit le: 17 Juin 2007
Messages: 10
Répondre en citant
Posté le : 29/06/2007 19:03:51 Sujet du message :

heu ? d accord ... mais tu modifirais le script comment alors ? parce que la je vois pas
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mythyzyn
Héros
Inscrit le: 23 Jan 2005
Messages: 292
Localisation: Lyncya
Répondre en citant
Posté le : 29/06/2007 23:28:08 Sujet du message :

Je suis désolé mais en ce moment j'ai pas le temps de me plonger sur le script Confused

Sauf si une âme charitable te fait ça, pour ma part il faudra attendre.

J'ai lancé les idées de modification sans trop réfléchir à la façon de faire mais en sachant que c'est faisable Embarassed Embarassed
_________________
NwN2 - Lyncya 3 - La Guerre du Crystium
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 30/06/2007 11:12:03 Sujet du message :

Enfaite, c'est assez simple:

On va prendre un exemple, ou la serveuse doit bouger à 4 endroits différent: Les Waypoints ont comme tag : 0_SERVEUSE_MOVE, 1_SERVEUSE_MOVE, 2_SERVEUSE_MOVE, 3_SERVEUSE_MOVE

Grâce à un script, on va retrouver le chiffre se trouvant au début. Toutes les locals commencent à 0, c'est pour ça que nous avons un WP de tag 0. Bref, on va placer le script dans le OnHB de la demoiselle, et lui ordonner, par rapport à sa local, d'aller à un WP.

Je t'aide vite fait à la construction du script, je ne suis plus sur NWN, et j'ai pas réellement temps d'ouvrir l'éditeur, donc ce sera juste un plan.

NWScript :
void main()
{
int iWP = GetLocalInt(OBJECT_SELF, "Waypoint");
int iMaxWP = 4;
int iNextWP = iWP+1;
string sTag = "_SERVEUSE_MOVE";
//Petite astuces, voir plus bas.
location lLoc = GetLocation(GetWaypointByTag(iWP));
//Script de movement
SetLocalInt(OBJECT_SELF, "Waypoint", iNextWP);
}
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.


Bon alors la il y a les principales fonctions, à savoir que toi tu feras le reste, faire bouger la demoiselle au WP. Résumons:

iWP = La local de la serveuse. À savoir, comme je l'ais dit plus haut, que en debut de "partie" la local est à 0, donc j'te conseil de placer la serveuse sur le WP de départ, c'est à dire 0. Donc, cette local désigne le premier chiffre que l'on a dans le tag. (X_SERVEUSE_MOVE où X = Local).

iMaxWP = Le nombre maximum de WP. On va éviter de faire augmenter les locals pour rien. J'ai 4 WPs, donc iMaxWP = 4.

iNextWP = Le WP suivant ou devra allé la serveur, donc c'est enfaite, si on a passé le CP à l'école : iWP + 1. (par exemple: la serveur est au WP 1, donc 1 + 1 : 2, la serveuse passera au WP 2).

sTag = La suite du tag du WP.

"Petite astuce" : Alors, tu as deux solutions. Soit tu considère que le WP 0 est le point de départ de la serveuse, donc, il sera inutile, soit tu considère que ce WP sera un point ou elle devra allé. Pour la première solution, je te conseil de mettre iNewWP à la place iWP dans la fonction lLoc, comme ça, elle passera directement le WP 0 pour aller au 1. Pour la deuxième solution, tu laisses comme j'ai fait, on va directement dans la source ; la local.

lLoc = La localisation du WP en question. Donc tout dépendra de l'astuce que tu as utilisée.

"Script de movement" = Je te laisse faire, je connais plus les fonctions exacts, mais ça commence par AssignCommand(OBJECT_SELF, ...); trouve la suite Very Happy

La dernière fonction met à jour la local, donc si elle était à 0 au début, elle passera à iNewWP ce qui veut dire 0 + 1, donc 1.

Pour t'aider un peu plus, tu mets un IF regardant si iMaxWP n'est pas atteint, à ce moment la t'évites de calculer, OU BIEN, tu remets à 0/1 pour que la serveuse refasse un p'tit tour.

Voila, j'espère que c'est clair Wink

Mais normalement il existe une fonction déjà approprié dans NWN, ou tu dois mettre le tag de la serveur, par exemple : NW_WP_SERVEUSE, et le WP doivent faire une suite de chiffre ; NW_WP_SERVEUSE_01. Et si tu click sur la serveuse, t'as le chemin de tracé.

T'as aussi une méthode ou faut toucher le OnSpawn, et enlever "//" à une ligne pour que la serveuse bouge toute seule, en revanche, je sais plus quel ligne :s

BK
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
burning-angel
Novice
Inscrit le: 17 Juin 2007
Messages: 10
Répondre en citant
Posté le : 30/06/2007 23:35:50 Sujet du message :

ok... je vais essayer ca, merci beaucoup, je te tiens au courant
 
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 39.859ms