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 18:33:05


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
madjawa
Voyageur
Inscrit le: 29 Mar 2006
Messages: 3
Répondre en citant
Posté le : 29/03/2006 23:26:28 Sujet du message : Script universel (dialogue)

Bonjour!
Je voudrais savoir si cela est possible :
J'ai un PNJ dans mon module avec un dialogue. Quand on lui parle, il nous donne le choix de nous téléporter vers plusieurs destinations genre :
Ou voulez vous aller?
--Zone 1
--Zone 2
--Zone 3

Je doit faire un script par destination ou y a t-il un moyen de faire un seul script pour cela??

Merci d'avance
madjawa
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 30/03/2006 01:00:57 Sujet du message :

Malheureusement faudra un script par destination. Car tu peux pas savoir quelle réponse à été choisie (le numero de la réponse). Donc si tu mets le même script, il saura pas de quelle ligne il vient, donc aucun moyen de retrouver la destination qui convient.


Un truc possible en revanche, et très utile, mais qui demande pas mal de reflexion sur comment le gérer c'est de faire un script générique justement pour savoir quelle ligne à été choisie (un peu comme dans le dmfi ou le cnr ou d'autres systèmes). Comme ça tu réduis grosso modo tous tes dialogues basés sur des listes à 2 scripts : dans le premier (la racine du dialogue) tu crées une liste de variable ordonnée (la ça serait les zones de destination) et dans le dernier (tu rajoutes une phrase après que le joueur ait choisi la destination qu'il veut, genre "ok je vous envoie là-bas") tu récupère le numero de la réponse et tu as ta zone selon la liste fixée au début.

Exemple :
tes scripts génériques de choix (sur les actions conséquentes des choix d'un PJ lors d'un dialogue)
NWScript :

void main()
{
    SetLocalInt(OBJECT_SELF,"REPONSE",1); //1 pour choix 1, 2 pour choix 2 etc.
}
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.


Sur l'action conséquente du "Bonjour où voulez vous aller ?" :

NWScript :

void main()
{
SetLocalObject(OBJECT_SELF,"DESTINATION_1",GetObjectByTag("WP_PREMIER_CHOIX"));
SetLocalObject(OBJECT_SELF,"DESTINATION_2",GetObjectByTag("WP_DEUXIEME_CHOIX"));
SetLocalObject(OBJECT_SELF,"DESTINATION_3",GetObjectByTag("WP_TROISIEME_CHOIX"));
//et ainsi de suite
}
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.


Sur l'action conséquente de "Ok je vous envoie là bas :

NWScript :

void main()
{
  object oPC = GetPCSpeaker();
  int nReponse = GetLocalInt(OBJECT_SELF,"REPONSE");
  object oDestination = GetLocalObject(OBJECT_SELF,"DESTINATION_"+IntToString(nReponse));
  AssignCommand(oPC,JumpToObject(oDestination));
}
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 là ça te fait faire plein de scripts mais l'avantage c'est que tous les scripts de choix tu peux t'en resservir dans d'autres dialogues.

Exemple :
PNJ : Salut, qu'est-ce que tu veux ?
choix PJ :
1- Une dague
2- Une epee longue
3- Une bouteille de bière
...
6-un grec frite

PNJ : Tenez.

Sur les réponses du PJ tu mets les même scripts de choix en action conséquente.
Sur le "Salut ..." :
NWScript :

void main()
{
SetLocalString(OBJECT_SELF,"CHOIX_1","resrefdeladague");
SetLocalString(OBJECT_SELF,"CHOIX_2","resrefdelepee");
SetLocalString(OBJECT_SELF,"CHOIX_3","resrefdelabiere");
//...
SetLocalString(OBJECT_SELF,"CHOIX_6","resrefdugrecfrite");
}

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 action conséquente du "tenez" :
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.


Enfin tu vois quoi ^^
Globalement c'pas mal d'avoir un système comme ça en général, paske souvent les scripts de dialogues tu refais 5 ou six fois la même chose, et ça te fait une liste de scripts immense, donc là même si ça te fais pas beaucoup moins de lignes à écrire, ça te réduit de beaucoup les scripts à faire.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
madjawa
Voyageur
Inscrit le: 29 Mar 2006
Messages: 3
Répondre en citant
Posté le : 30/03/2006 09:06:32 Sujet du message :

Merci pour ta solution, j'y avais pas pensé, mais je pense que ça réduira le nombre de script (je ferais plusieurs dialgues de ce genre)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 30/03/2006 12:41:10 Sujet du message :

Il y a quelque chose d'approchant de présenté ici
http://www.system-tek.com/nwinter/phpbb2/viewtopic.php?p=125411#p125411
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 30/03/2006 12:51:43 Sujet du message :

Oui, ton système est top pour les conditions, mais là c'est sur les conséquences qu'il veut génériser (?) ses scripts, et là ça ne fonctionne plus de la même manière.

Mais les 2 systèmes ensemble ça donne de la balle je pense ^^
 
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 : 30/03/2006 16:45:35 Sujet du message :

Je confirme, ceci est une bonne méthode ! Ca évite d'avoir des tonnes de scripts de quelques lignes pour chaque dialogue.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 31/03/2006 10:56:24 Sujet du message :

Manquait ça

à décliner de 1 à 5
NWScript :

//:: Updated Lylver
/* ship_custom1.nss
* by dluan on jul 2003 */



void main()
{
    SetLocalObject(GetPCSpeaker(),"SHIP_CUSTOM",GetLocalObject(GetPCSpeaker(), "SHIP_CUSTOM1"));
  ExecuteScript("ship_custom",OBJECT_SELF);
}
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.


NWScript :

//:: Updated Lylver
/* ship_custom.nss
* by dluan on jul 2003 */


void main()
{
    object oTarget = GetPCSpeaker();
    object oObject = GetLocalObject(oTarget, "SHIP_CUSTOM");
    object oArea = GetArea(oObject);
    SetLocalInt(oArea, "SHIP_PIRATE", 1);
/* la on envoyait tous les pirates */
    object oPlayer = GetFirstFactionMember(oTarget);
    while ( GetIsObjectValid(oPlayer) && (GetArea(oTarget) == GetArea(oPlayer)) ) {
        SetLocalObject(oPlayer, "PIRATE", oArea);
        AssignCommand(oPlayer, JumpToObject(oObject));
        oPlayer = GetNextFactionMember(oTarget);
    }
}
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.
 
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 38.308ms