Forum WTeam Le site des moddeurs 100% francophone. |
|
| [TUTO] Espionner conversation de PNJs | |
| | Auteur | Message |
---|
Drace Magicien
Nombre de messages : 75 Age : 34 Date d'inscription : 01/08/2008
| Sujet: [TUTO] Espionner conversation de PNJs Lun 12 Avr 2010, 13:11 | |
| Ce tuto est le résultat de l'aide apporté par Mike89 lorsque je n'arrivais pas à le faire. Je part du principe que vous savez créer une quête, un package et un script
Nous utiliserons : -1 quête -1 script de quête -2 scripts d'objet (PNJ) -3 markers -2 packages
I- Créez une quête :
-Nommez la quête "TutoConvers" -Dans l'onglet "conversation", créez deux nouveaux sujets. Appelez les "Bonjour1 " et "Bonjour2 ". -Pour lancer la conversation il faudra que vous soyez au stage 10 de la quête, faites donc comme vous voulez, PNJ ou MessageBox. -Nous reviendrons plus tard dans cet onglet.
II- Les markers :
-Sélectionnez la Cell voulu. -Dans "Object Window" => "WorldObjects" => "Static", sélectionnez "XMarkerHeading " et placez-le sur la Cell à l'endoit où le PNJ1 se rendra. -Double cliquez et entrez comme référence : PNJ1Marker -Faites de même une deuxième fois pour le PNJ2 en nommant la référence : PNJ2Marker . -N'éloignez pas trop ces deux markers. -Toujours dans "Static", sélectionnez "XMarker " et déposez le à une distance proche des deux autres (cela indiquera l'endroit approximatif où le joueur se trouvera pour écouter la conversation). Puis nommez le "PlayerMarker "
III- Organiser les packages :
-Créer 1 PNJ et déposez le dans la Cell. Nommez sa référence "PNJ1Ref ". -Retournez sur sa page de création et allez dans"AI" puis créez un nouveau package. -Nommez le ConversPNJ1aPNJ2. -Dans "Package Type" choisissez "Travel" et cochez "Skip Fallout Behavior" comme Flag. -Délimiter les heures puis programmez les conditions ainsi : -GetQuestVariable ; Quest:TutoConvers ; <1 -GetStage ; Quest:TutoConvers ; =10 Le package sera actif donc seulement si le stage de la quête est à 10 et que la variable et inférieure à 1. -Dans l'onglet "Location" => "Near Reference" choisissez la Cell et le marker où le PNJ se rendra pour la conversation, c'est à dire PNJ1Marker -Recommencez cela pour le PNJ2 en nommant sa référence "PNJ2Ref " et le package "ConversPNJ2aPNJ1".
Dernière édition par Drace le Lun 12 Avr 2010, 13:56, édité 4 fois | |
| | | Drace Magicien
Nombre de messages : 75 Age : 34 Date d'inscription : 01/08/2008
| Sujet: Re: [TUTO] Espionner conversation de PNJs Lun 12 Avr 2010, 13:11 | |
| IV- Création des scripts d'objet :-Allez dans "Gameplay" => "Edit script" => "New", sélectionnez "Object" comme type de script puis copier ce script : - Spoiler:
scriptname Conversation PNJ1
short Doonce
begin OnPackageEnd TutoConversPNJ1aPNJ2script
if ( Doonce == 0 ) set TutoConvers.TalkOnce to ( TutoConvers.TalkOnce + 1 ) set Doonce to 1 endif End
-Sélectionnez le PNJ1 dans "Object Window" puis dédié lui le script. -Refaites la même démarche en copiant ce script : - Spoiler:
scriptname Conversation PNJ2
short Doonce
begin OnPackageEnd TutoConversPNJ2aPNJ1script
if ( Doonce == 0 ) set TutoConvers.TalkOnce to ( TutoConvers.TalkOnce + 1 ) set Doonce to 1 endif End
-Sélectionnez le PNJ2 dans "Object Window" puis dédié lui le script. V- Création des scripts de quête :-Allez dans "Gameplay" => "Edit script" => "New", sélectionnez "quest" comme type de script puis copier ce script : - Spoiler:
scriptname TutoConversscript
short TalkOnce short Convo short MoveAway short Doonce
begin gamemode
if ( GetStage TutoConvers == 10 ) && ( TutoConvers.TalkOnce == 2 ) if ( Player.GetDistance PlayerMarker <= 100 ) && ( PNJ1Ref.GetDistance PNJ1Marker <= 200 ) && (PNJ2Ref.GetDistance PNJ2Marker <= 200 ) DisablePlayerControls PNJ1Ref.startconversation PNJ2Ref, Bonjour1 set TalkOnce to 3 endif endif
if ( GetStage TutoConvers == 10 ) && ( TutoConvers.MoveAway == 1 ) && ( Doonce == 0 ) PNJ1Ref.Evp PNJ2Ref.Evp SetStage TutoConvers 20 EnablePlayerControls set Doonce to 1 endif end
-Enregistrez le tout puis retournez dans votre quête " TutoConvers" et dédiez lui ce script. VI- Programmer la Conversation :-Vous êtes donc dans votre quête. -Allez dans l'onglet "Conversation" pour retrouver vos sujets. -Commencez par " Bonjour1" : -Condition : GetIsId ; NPC: PNJ1 ; ==1-Dans " Link To" séléctionnez " Bonjour2", dans " Next Speaker" laisser " Target". -Dans " Result script" mettez : set TutoConvers.Convo to 1-Puis " Bonjour2" : -Condition : GetIsId ; NPC: PNJ2 ; ==1GetQuestVariable ; Quest:TutoConvers ; ==1 -Dans " Link From" sélectionnez " Bonjour1", dans " Next Speaker" laisser " Target". -Dans " Result script" mettez : set TutoConvers.MoveAway to 1Voilà ! Essayez d'écouter la conversation. En espérant que cela marche pour vous, sinon relisez bien le tuto, il est possible que pour des manipulations a faire pour chaque PNJ vous ayez mal écrit la référence. | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: [TUTO] Espionner conversation de PNJs Lun 12 Avr 2010, 17:58 | |
| Merci Drace pour ce tuto.
En le relisant, je peux te suggérer quelques améliorations.
Les Doonce que tu utilises dans les scripts suggèrent deux remarques :
A) Les doonce finaux sur les scripts dans les OnPackageEnd sont inutiles si tu as bien paramétré les conditions de lancement du package. En ce cas le package ne se relancera pas lors des évaluations futures de l'AI de chaque acteur. En particulier, si tu changes d'étape, il suffit de tester si le stage est inférieur à cette valeur ;
B)Lorsque la quête ne sert plus, il faut l'arrêter (StopQuest, et startQuest pour en lancer ou relancer une). Cela a l'avantage de ne plus faire tourner le script de quête, tout en conservant les variables de quête en l'état (mais modifiables par d'autres scripts), et contribue à améliorer la fluidité du jeu... Cependant, cela ne vaut que si la quête s'arrête en même temps que l'utilité du script. Sinon on ne peut pas stopper la quête, et le doonce reste nécessaire. En ce cas deux possibilités : 1) penser à ralentir le script en l'exécutant moins souvent que les 5 secondes par défaut ; 2) s'il reste de nombreuses étapes de quêtes longues à effectuer, il peut être intéressant de stopper la quête pour stopper le script et d'en starter une nouvelle, qui prend le relai pour une nouvelle phase du scénario. Cette dernière technique peut aussi être utilisée pour éviter d'avoir des scripts très longs. C'est pourquoi un scénario long est découpé en quête, afin d'en optimiser les scripts et pouvoir les stopper.
Le découpage en quêtes et étapes est aussi utile pour découper les dialogues (pense au théâtre : une pièce est découpée en actes et en scènes : unité de temps, de lieu, d'action. Ce principe ancien du théâtre classique est bien adapté aux jeux de rôles comme Oblivion).
Dernière édition par Mike89 le Lun 12 Avr 2010, 18:09, édité 1 fois | |
| | | Drace Magicien
Nombre de messages : 75 Age : 34 Date d'inscription : 01/08/2008
| Sujet: Re: [TUTO] Espionner conversation de PNJs Lun 12 Avr 2010, 18:06 | |
| Merci pour tes remarques et effectivement j'aurais dû faire comme tu le dit, mais je suis novice en script et donc j'ai posté ce que je savais lol que tu m'a appris d'ailleurs.
Pour stopquest personnellement je les stoppe dans les stages car c'est pas très long comme quêtes que j'utilise.
Avec ce que tu as ajouté, ceux qui le lieront auront les informations nécessaire ^^ | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: [TUTO] Espionner conversation de PNJs Lun 12 Avr 2010, 18:14 | |
| Oui, ton tuto est bon. Mes remarques suggèrent une optimisation seulement si nécessaire. J'ai modifié le point A. En effet, le AddScript package et DeleteScriptPackage sont des gestions dynamiques des scripts, qui ne s'appliquent pas aux packages créés et ajoutés à l'AI d'un acteur dans le TESC. C'est une autre façon de lancer des packages et de les retirer en cours de jeu. Par contre, la condition de lancement d'un package dans le jeu (mise dans TECS) doit être murement réfléchie pour interdire sa relance lorsqu'il devient inutile. Cela permet de libérer le PNJ pour lui faire faire autre chose, dans sa liste de priorités de son AI. | |
| | | Contenu sponsorisé
| Sujet: Re: [TUTO] Espionner conversation de PNJs | |
| |
| | | | [TUTO] Espionner conversation de PNJs | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|