Forum WTeam
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Forum WTeam

Le site des moddeurs 100% francophone.
 
AccueilPortailGalerieRechercherDernières imagesS'enregistrerConnexion
-36%
Le deal à ne pas rater :
Aspirateur balai sans fil Dyson V8 Origin
254.99 € 399.01 €
Voir le deal

 

 Exemple de quête simple pour comprendre sa structure

Aller en bas 
5 participants
AuteurMessage
Eagle
Apprenti ArchipelModeur
Apprenti ArchipelModeur
Eagle


Masculin Nombre de messages : 37
Age : 34
Date d'inscription : 06/12/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeJeu 06 Déc 2007, 20:29

Voilà comme convenu avec Mike sur MSN je poste ici quelques questions pour les novices sur: "comment faire une quête toute simple", si vous avez des réponses précises, à vous l'honneur.

Alors, voilà le principe de la quête premièrement :

-le PJ reçois un message au début du jeu(comment faire ?)disant qu'il doit allez voir un PNJ que nous allons appeler Marcel(c'est un exemple).

-Le PJ va donc voir Marcel et lui parle, Marcel lui demande donc d'aller chercher un objet(comment faire ?)


Le PJ va chercher l'objet et le ramène à Marcel qui lui donne une récompense (comment faire ?) et la quête est terminée.

Alors voilà messieurs les pros du script et des quêtes, je vous demande, s'il vous plaît, d'expliquer aux novices que nous sommes comment faire une telle quête dans le détail.

Merci d'avance !
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeVen 07 Déc 2007, 04:27

D'accord, alors accrochez-vous, çà démarre !

-le PJ reçois un message au début du jeu (comment faire ?) disons qu'il doit allez voir un PNJ que nous allons appeler Marcel (c'est un exemple).

Tout d'abord, lire les articles généraux du Wiwiki à propos du menu Character/ Quest du TESCS2.
(Articles écrits par Mike... Pharaon , oui, les 360 Diable tordu ! Euh, sauf 1 Nargue )

PRELEMINAIRES

Dupliquer dans l'Object Windows un objet de base PNJ et le nommer xxMarcel comme EditorID, Déposez le près du carrefour près de l'écurie de Chorrol, à l'extérieur des murs (la cell ChorrolStables00). Nommez cette reference xxMarcelRef.
Spoiler:

On peut aussi ajouter un mapmarker (voir dans les statics, et lui donner un nom dans le monde, par exemple MapMarkerMarcel (renseignez les autres paramètres et cases à cocher...).

En savoir plus : sur les MapMarker (vous attendrez je n'ai pas encore écrit çà)

CREER LA QUETE

Clic-droit dans la liste des quêtes (col gauche) / New - Appelons là QuestMarcel
Voir description de la manip pour l'onglet Quest Data sur le Wiwiki.

Astuce : Pour que la quête démarre toute seule au début du jeu, il faut cocher la case Start Game Enabled. Ce n'est pas conseillé si la quête comporte un script de quête, et que l'on a pas besoin d'elle tout de suite. Surtout si le script est LOURD. Mais il y a des astuces pour qu'un script soit "allégé" même si globalement il est LOURD... On verra cela dans le cours avancé.

Spoiler:

Une quête qui ne comporte pas de script de quête peut être sans inconvénient lancée dès le début du jeu (sans pertes de performances) grace à cette case à cocher.

PREMIERE SOLUTION

Pour cela utiliser une fonction de script : Messagebox (ou Message... mais je préfère l'autre). Pour cela utiliser un script de quête dans ta quête.

En savoir plus : sur la fonction MessageBox ICI

CREER LE SCRIPT DE QUETE

Menu Tescs 2 : Gameplay / Edit Scripts... puis Script/New...
Effrayé Maintenant l'angoisse de la page blanche !

Attention, très important : dans la fenêtre de saisie des scripts, il y a un petit menu déroulant : Script Type ... cela sélectionne le type de script...
Par défaut, il contient Object.
* Pour une quête il faut qu'il soit sur Quest ;
* Pour un effet magique scripté il doit être sur Magic ;
* pour le reste sur Object : les objets de type actor (creature, NPC), item, potion, activator, door, container, flora, furniture, light. (Pas de script sur static, grass, tree) .
Si vous ne respectez pas le type de script (Ex : un object-script associé à une quête...) il ne fonctionnera pas ! ET NE VENEZ PAS CHOUIGNER p'tit diable !
En savoir plus : sur les types de script

Voici le script :
; Ce qui est derrière un ";" est un commentaire, et ne s'exécute pas.
; On est pas obligé de mettre des commentaires,
; Mais, c'est utile pour plus tard (si votre mémoire défaille), ou pour les autres... Donc tout ce qui est ici en rose peut être enlevé, sans modifier le fonctionnement du script.
Scn MarcelScript ; commande Scn = ScriptName
; MarcelScript sera son nom dans la liste des scripts du TESCS

Short DoOnceMarcelInvite ; déclaration d'un entier court, avec son nom de variable.
; autres types : long (entier long) et float (virgule flottante).
; Les variables doivent être déclarées avant le premier bloc Begin... end

Begin GameMode
; début d'un bloc qui s'exécute si aucun menu n'est affiché dans le jeu
; donc quand on joue, pas si l'inventaire du PJ est affiché,
; ni si la carte est affichée, ni si un messagebox est affiché,
; ni en mode console... etc... la liste est très longue.
; attention, les ... n'existent pas (mettre des tabulations, pour la lisibilité)
...If DoOnceMarcelInvite == 0 ; la variable est-elle à zéro ?
......MessageBox "Allez voir Marcel à Marcel-City..."

; il sagit ici d'un format simpliste du MessageBox, qui est une puissante fonction de communication avec le jeu...
; Ici la boite à message sera munie d'un unique bouton OK
......ShowMap MapMarkerMarcel ; rend visible un mapmarker caché
......Set DoOnceMarcelInvite To 1 ; la variable passe à un
...EndIf


; si une variable n'a jamais été utilisée, elle est à 0
; ce script, muni d'un "DoOnce" n'enverra le message qu'une seule fois !

End ; fin de bloc

Sauver le script... Si aucun message d'erreur n'apparait, vous aussi vous êtes sauvé ! Sinon...


DEBUGUER LE SCRIPT
Effrayé L'angoisse du débugage commence !
Essayez de comprendre ce que ça vous raconte... normalement il vous donne un n° de ligne..; cliquez sur une ligne du script, son n° s'affiche en bas... plus qu'à chercher.
Erreurs communes de compilation :
* faute de frappe dans un nom de fonction, de commande, de variable
* = au lieu de ==
* il manque un paramètre à la fonction... voir liste fonctions (variable, indicateur, libellé...)
* le paramètre n'est pas du bon type pour la fonction
* il manque un EndIf, ou un End (blocs incomplets)
* deux scripts ne peuvent pas avoir le même nom. Changez de scn.

Quand le compilateur ne râle plus à la sauvegarde, c'est bon. (Pour la grammaire).
Maintenant, associez le script à votre quête ou votre activateur. Pour cela sélectionnez MarcelScript dans la fenêtre déroulante Script. Le bouton |...| juste à coté permet de rééditer le script... pratique !
Attention : si le script n'est pas associé à l'objet (ou aux objets) ou quête ou effet qui doivent l'utiliser, ne vous étonnez pas si cela ne marche pas !

Ce n'est pas fini : Il faut tester... rendez vous dans le jeu. N'oubliez pas de cocher votre mod dans la liste... sinon, çà marche pas ! Un mod n'est JAMAIS ASSEZ testé ! Question : Ce que je lui ai dit de faire, est-il ce qu'il fallait faire ? Normalement ça se voit, mais... il existe des bombes à retardement (plus tard !).

Exemple : vous n'avez pas mis de DoOnce... Le message s'affiche... vous cliquez sur OK, et aussitôt il réapparait. ETC. Vous êtes bloqué ! C'est un bug dû à votre petit cerveau ! Mais il deviendra grand.


LES OUTILS DE TEST DANS LE JEU

Commandes utiles à la console :

Pour une quête :
SQ : ShowQuests... comme son nom l'indique, cela donne la liste des quêtes
SFQL : Show Full Quest LOG... sans commentaire !
SQV MarcelQuest : donne la liste des variables de la quête avec leur valeur... Je dis bien MarcelQuest, pas MarcelScript !!!! Mais il faut bien sur que MarcelQuest ait un script pour avoir des variables de quête
(mais elle le trouve toute seule, son script ! pasdidees )

* StartQuest MarcelQuest
* StopQuest MarcelQuest ; co MY LADY Nargue !

Pour un objet muni d'un script :
Cliquer sur l'objet (pour cliquer dessus, il faut qu'il soit visible. Si vous avez un activateur invisible, tant pis... en fait, il y a dans la fenêtre rérérence une case à cocher "Initialy Disabled.".. décochez pour les tests... mais après tout, vous avez le droit de mettre un lampadaire décoratif comme activateur... mais il faut le prendre dans la liste des ACTIVATOR, pas dans les statics, à moins de faire une manip de récup et de l'ajouter aux activators (Cours pour les experts).

Après avoir cliqué dessus, vous verrez son ID (formID de la référence) en haut de l'écran. Les commandes et fonctions de référence que vous taperez maintenant s'appliqueront à cette référence, comme si vous tapiez "maref.fonction param1...". Donc tapez seulement "fonction param1..."
Exemples:
* SV : affiche toutes les variables du script de cet objet (s'il y en a un)

Si la liste des variables est longue, on revient en arrière avec page-up, et en avant avec page-down (les flèches rayées au niveau de inser et suppr). Vous suivez ?

Presque toutes les fonctions de script sont utilisables dans la console. Plus quelques autres. Mais les fonctions de référence doivent avoir une référence sélectionnée... Cliquez dessus (Déja vu !).

Le mode DEBUG
A la console, tapez :
* TDT (ToggleDebugText) : une foule de renseignements !

>>>> Puis, pour choisir les infos que vous voulez voir, tapez :
* SDT # : # représente un entier, dont voici la liste :

* SDT -1 : affiche le nb d'acteurs gérés actuellement
* SDT 0 : affiche l'heure actuelle du jeu, le lieu, le package actif
* SDT 1 : affiche ifos d'animation
* SDT 2 et 3 : Queue
* SDT 4 : Exterior LODs
* SDT 5 : infos script
* SDT 6 : combat
* SDT 7 : Style de combat
* SDT 8 : magie
* SDT 9 : Acteur
* SDT 10 : Talents du PJ
* SDT 11 : Audio
* SDT 12 : FPS seul (défile sur tous les autres écrans en haut à droite)
* SDT 13 : Geométrie

Si vous sortez de la console, les infos se mettent à jour en continu... suivez par exemple l'évolution des FPS (taux de frame).
Pour arrêter çà, revenez dans la console et tapez de nouveau TDT. (Deux TDT consécutifs activent puis désactivent le DEBUG MODE).


SUITE PLUS TARD
Normalement il ne devrait pas y avoir de question... sinon : boulet !

-Le PJ va donc voir Marcel et lui parles, Marcel lui demande donc d'aller chercher un objet(comment faire ?)

-Le PJ va chercher l'objet et le ramène à Marcel qui lui donne une récompense(comment faire ?) et la quête est terminer.


Les fichiers voix :
Pour les caractéristiques des fichiers voix : tu les trouveras ICI sous le Wiwiki.


Dernière édition par le Mer 12 Déc 2007, 14:03, édité 8 fois
Revenir en haut Aller en bas
Eagle
Apprenti ArchipelModeur
Apprenti ArchipelModeur
Eagle


Masculin Nombre de messages : 37
Age : 34
Date d'inscription : 06/12/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeVen 07 Déc 2007, 18:33

J'ai deux question:
La première est: Chez moi ca n'apparaît pas comme une quête c'est à dire, aucun message dans le journal.
Quand je mes ShowMap MapMarkerMarcel, il ne veut pas me compiler.
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeVen 07 Déc 2007, 21:25

Eagle a écrit:
J'ai deux question:
La première est: Chez moi ca n'apparaît pas comme une quête c'est à dire, aucun message dans le journal.

DEUXIEME SOLUTION
POUR AVOIR UN MESSAGE DANS LE JEU ET DANS LE JOURNAL

Pour cela dans l'onglet de la quête "Quest Stage", il faut créer deux stages (des numéros d'étape)... les étapes, c'est ce qui fait avancer la quête, mettre les messages dans le journal et exécuter des scripts de résultat.
* tu selectionnes ta quête dans la colonne de gauche
* dans la colonne Index : clic droit, NEW et tu saisis le n° 0
* dans la colonne Index : clic droit, NEW et tu saisis le n° 10
Tu selectionnes l'index 0 : il n'y a rien dans les cases, tu laisses comme çà, on verra plus tard
Tu selectionne l'index 1 et tu entres les messages :
* clic droit /NEW dans le liste des "log entry" (le tableau, pas la grande case) et tu entres le message dans la case "log entry" que tu souhaite voir dans le journal. Pour une autre ligne, tu refais new dans le tableau... mais ce n'est pas nécessaire ici, puisque on ne mettra pas de conditions.

* met rien dans result script pour l'instant
Rien non plus dans les conditions

Cliques sur OK pour sauver et fermer la fenêtre de quête.

Maintenant il faut forcer le passage au stage 10
Pour cela il faut executer la fonction SetStage IDdeQuête 10

Le bon endroit est de le faire dans le script de quête, au démarrage de la quête. il faut modifier le bloc IF... EndIF comme ceci :


; le début est inchangé...

Begin GameMode
...If DoOnceMarcelInvite == 0
......MessageBox "Allez voir Marcel à Marcel-City..."

......ShowMap MapMarkerMarcel ; rend visible un mapmarker caché
......SetStage MarcelQuest 10 ; active l'étape 10
......Set DoOnceMarcelInvite To 1 ; la variable passe à un
...EndIf



End ; fin de bloc

EDIT MIKE : tu peux enlever le messagebox. il fait double emploi avec le LOG ENTRY.

En résumé : l'onglet Quest stage de la fenêtre des quêtes sert à faire des beaux setstage... c'est à dire d'écrire dans le journal et d'éxécuter éventuellement un petit script de résultat... Selon les conditions présentes sur plusieurs lignes de la LOG ENTRY, tu peux gérer des fins différentes pour chaque stage (étape de la quête).

Eagle a écrit:
Quand je met ShowMap MapMarkerMarcel, il ne veut pas me compiler.

C'est certainement que tu n'a pas mis de MapMarker dans le jeu, ou que tu t'est trompé de Reference Editor ID dans la fenêtre reference.

L'objet MapMarker se trouve parmi les objets de type Static. Dépose en un là ou tu veux, dans une cellule, près de Marcel certainement, non ?
Puis tu cliques-droit dsur ce marker, et tu fais EDIT... La fenêtre reference s'ouvre. Met l'ID dans la case prévue pour çà. regarde dans les onglets, il y a quelques paramètres interessants, comme le choix du type d'icone qui s'affichera sur la carte du jeu.


Dernière édition par le Lun 10 Déc 2007, 15:27, édité 4 fois
Revenir en haut Aller en bas
Eagle
Apprenti ArchipelModeur
Apprenti ArchipelModeur
Eagle


Masculin Nombre de messages : 37
Age : 34
Date d'inscription : 06/12/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeSam 08 Déc 2007, 11:11

Ca marche(PRESQUE) à merveille.
Tout d'abord, c'est bon la quête marche mais petit problème: quand je mes un mapmarker que que dans son data je coche la case city(le marquer est près du phare de Anvil donc dans la ville) ou autre chose ca marche mais à partir du moment où je fais TAB pour afficher la carte le jeu me fait un retour sous windows.

Deuxième petit problème: Quand je lance le jeu, il y a un message basique ET le message de quête qui apparaissent. J'aimerais seulement voir le message de quête.
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeDim 09 Déc 2007, 17:30

Eagle a écrit:
Ca marche(PRESQUE) à merveille.
Tout d'abord, c'est bon la quête marche mais petit problème: quand je mes un mapmarker que que dans son data je coche la case city(le marquer est près du phare de Anvil donc dans la ville) ou autre chose ca marche mais à partir du moment où je fais TAB pour afficher la carte le jeu me fait un retour sous windows.
Il faut mettre un nom au mapMarker : un texte dans la case name de l'onglet Marker Data. Et aussi un Reference FormID pour pouvoir utiliser la fonction ShowMap.


Eagle a écrit:
Deuxième petit problème: Quand je lance le jeu, il y a un message basique ET le message de quête qui apparaissent. J'aimerais seulement voir le message de quête.

Enlève le messagebox... ou si tu as mis deux lignes dans le tableau Log Entry de l'onglet Quest Stage, n'en garde qu'une.
*Le MessageBox (1ere solution) fait double emploi avec le logEntry de l'étape de quête (stage, deuxième solution d'avoir un message). Mais le messagebox ne va pas dans le journal.
* De même si tu mets deux lignes dans le tableau Log Entry, sans conditions, tu auras deux messages dans le jeu. Mais avec des conditions, par exemble si tu testes qu'il y a tel objet dans l'inventaire, et sur l'autre qu'il n'y est pas, les deux messages ne pourront pas apparaitre ensembles... donc ce sera un moyen d'avoir deux résultats différents, ou plus, pour chaque stage.


Dernière édition par le Lun 10 Déc 2007, 15:19, édité 2 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeDim 09 Déc 2007, 20:09

Eagle a écrit:

-Le PJ va donc voir Marcel et lui parles, Marcel lui demande donc d'aller chercher un objet (comment faire ?)

Pour cela il suffit de créer un topic, xxMarcelTopic avec pour name Chauffe Marcel, par exemple, (ou ce que vous voulez) et de l'ajouter à la liste des sujets de conversations du joueur avec la commande AddTopic dans le script de quête, comme çà le joueur pourra parler à Marcel . Qui lui répondra d'aller chercher tel TRUC... etc.

Dans le détail :

1) Dupliquer dans l'Object Windows un objet de base Machin et le nommer xxMarcelTruc comme EditorID.
Pourquoi dupliquer la base et pas que la référence sur la base existante ? Pour ne pas casser Oblivion, c'est tout.
Spoiler:

Si ce n'est déja fait, Dupliquer dans l'Object Windows un objet de base PNJ et le nommer xxMarcel comme EditorID, Déposez le près du carrefour près de l'écurie de Chorrol, à l'extérieur des murs (la cell ChorrolStables00). Nommez cette reference xxMarcelRef.
Dans AI, supprimez ses packages (clic-droit - delete), suprimez aussi ses factions, decochez essential et Quest Item, et faites ce que vous voulez pour le reste (vêtements, sorts, face...).

2) Créer un Topic dans la quête MarcelQuest, ID xxMarcelTopic nommé Chauffe Marcel, avec comme ligne réponse n ° 1 :

* Condition : GetStage xxMarcelQuest == 10
* Response : "Ah, bonjour ! J'ai un service à vous demander, contre 10 PO, allez me chercher un truc."
* comme Result Script :
......SetStage xxMarcelQuest 20

3) Dans le script de quête, dans le DoOnce, ajouter :
........ AddTopic xxMarcelTopic

4) Dans le script de quête, ajouter :

Attention, AVANT de commencer ce scriptage :
xxMarcelRef (ou ce que vous voulez) est l'EditorID de la Reference de Marcel dans la cellule où vous l'avez placé dans le monde, pas celui de sa base. Si vous n'en avez pas mis... faites-le, sinon le script ne compilera pas.

*au début parmi les variables
..... short reponse
..... short DoOnce1
*APRES le EndIf du DoOnce qui existe déja,
... If GetStage xxMarcelQuest == 20
..... If DoOnce1 == 0
......... MessageBox "Accepter la demande de Marcel", "OUI", "NON"
......... Set DoOnce1 to 1
..... EndIf
..... Set reponse to GetButtonPressed
..... If reponse < 0
......... Return
..... ElseIf reponse == 0
......... SetStage xxMarcelQuest 30
......Else
......... SetStage xxMarcelQuest 35
......EndIf
..... xxMarcelRef.Say xxMarcelTopic ; pour forcer la réaction verbale de Marcel sans avoir à réengager le dialogue.

... EndIf
-----------------------------------
Spoiler:


5) Les Stages à ajouter
Créer le stage 20, avec quelque chose comme log :
"J'ai parlé à Marcel, il m'a demandé d'aller chercher le truc contre 10 PO"

Créer le stage 30, avec quelque chose comme log :
"Marcel m'a demandé d'aller chercher le truc contre 10 PO" J'ai accepté. "

Créer le stage 35, vide.

Créer le stage 40, avec :
* Comme log : "Marcel m'a demandé d'aller chercher le truc contre 10 PO" J'ai refusé. Il n'était pas content."
* Comme script de résultat :
...... xxMarcelRef.ModDisposition player -20
...... StopQuest xxMarcelQuest
* Cocher la case Complete Quest.

Créer le stage 50, vide.

Voilà pour les étapes nécessaires (stages) pour la première rencontre avec Marcel.

Spoiler:

6) Les autres réponses du Topic Chauffe Marcel :

Réponse 2 : (accepte)
* Condition : GetStage xxMarcelQuest == 30
* Response : "Oh! Merci, je ne m'attendais pas à çà d'un inconnu ! Alors, allez-y ! Vous le trouverez à Schmuckville dans un tonneau près de la taverne"
* Emotion : Surprise 80
* Comme Result Script :
......SetStage xxMarcelQuest 50

Réponse 2 bis : (refuse)
* Condition : GetStage xxMarcelQuest == 35
* Response : "Ah! Je m'y attendais ! Partez et ne revenez pas, si vous ne voulez pas recevoir la raclée que vous méritez !"
* Emotion : Disgust 80
* Comme Result Script :
......SetStage xxMarcelQuest 40

Réponse 3 : (repète à la demande si mission acceptée)
* Condition : GetStage xxMarcelQuest == 50
* Response : "Allons, mon Truc ? Dans un tonneau près de la taverne de Schmuckville. Revenez quand vous l'aurez !"
* Emotion : Neutral
* Comme Result Script :
...... xxMarcelRef.ModDisposition player -10 ; pour faire "fun" ! devinez ce qui se passera si vous l'agassez ?

7) Dans Quest DATA (très important... sinon n'importe qui pourra dire les réponses de Marcel)

..... GetIsID xxMarcel == 1

Spoiler:

Et aussi : cocher la case "Allow repeated conversation topics".


Ajouter cette condition générale (valable pour TOUS les sujets de la quête)
Si on devait parler à une autre personne dans cette aventure, il faudrait tester si c'est la bonne personne à chaque réponse. Ou ouvrir une sous-quête par personne.... Mais cela serait lourd, une deuxième quête pour si peu.

J'ai testé, ajouté un doonce pour le MessageBox OUI-NON, et le Say.
C'est BON.

Eagle a écrit:

Le PJ va chercher l'objet et le ramène à Marcel qui lui donne une récompense (comment faire ?) et la quête est terminée.

Plus tard !


Dernière édition par le Lun 10 Déc 2007, 13:33, édité 10 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeDim 09 Déc 2007, 20:35

Explications relatives aux references dans les scripts





Remarque préléminaires : (en rose le vocabulaire qui fait plus "programmeur" en programmation orientée objet comme en C++ ou Java). Mais je ne veux pas, comme certains, parler en puriste de la programmation objet... parce que ce que l'on voit dans le TESCS, ce sont des désignations à la Beth ! Ou de la boite qui a écrit çà pour Beth. Je donne juste des équivalents pour ceux qui connaissent les langages objet.

Les REFERENCES, tout savoir ce que je sais, ou presquePharaon

Dans ces premiers scripts, vous aurez remarqué deux types de fonction :
1) celles qui n'ont pas besoin de Reference-EditorID,
2) et celles qui doivent en avoir un.

Les premières ne sont pas des fonctions de référence (d'instance pour les programmeurs) Pas de référence = pas de problème.
Exemples : MessageBox, Get, Set... to, Return. En réalité, plus que des fonctions, ce sont des commandes, comme le sont indubitablement If, ElseIf, Else, EndIf, Scn, Begin, End, Short, Long, Float.
Les secondes sont des fonctions qui ne marchent que sur une référence (une instance de classe = une référence d'objet) On les nomme fonctions de reference, dans le vocabulaire de Bethesda. Pas de référence = erreur de compilation.
Exemples : ModDisposition, Say

Cependant, à l'écriture on est dispensé de préfixer la fonction de Reference si le script est lui-même attaché à une réference.
Il existe donc des scripts de reference, et d'autre qui ne le sont pas.

Voyons çà en détail

Note a propos des exemples : On suppose qu'il existe dans le monde une reference ayant pour editorID MarcelRef du PNJ Marcel, et une autre, AchilleRef (instances des sous-classes Marcel et Achille, de la classe PNJ).

1) Les scripts de quête NE SONT PAS des scripts de référence. (Ils tournent sur une quête, pas sur une reference d'objet (instance de classe) dans le monde. C'est pour cela qu'il faut préfixer TOUTES les fonctions de reference dans les scripts de Quête, pour savoir à qui (ou à quoi) elles s'appliquent.

Exemples :
Marcel.kill (incorrect, ID objet de base au lieu de référence)
MarcelRf.kill (incorrect, vous avez fait une faute de frappe)
MarcelRef.kill (correct, MarcelRef meurt d'un arrêt du coeur, pas de crime) [/color]
MarcelRef.kill AchilleRef ( correct, MarcelRef est tué par AchilleRef, qui commet un crime... - comprendre : est repéré comme ayant commis un crime... ) mais sans voir Achille tuer Marcel. Marcel tombe raide mort, où que Achille soit dans le jeu, c'est tout.
Spoiler:
MarcelRef.kill player (correct, MarcelRef est tué par le PJ, qui commet un crime)
player.kill MarcelRef (correct, le PJ est tué par MarcelRef, qui commet un crime) enfin, entre les les deux, c'est vous qui voyez... mais c'est correct pour la compilation.
Spoiler:


kill player (incorrect pour un script de quête) RIEN est tué par player.
ModDisposition player -10 (incorrect pour un script de quête)

2) Les scripts de résultat de Stage de Quête (étape) NE SONT PAS des scripts de référence. Donc les fonctions de référence doivent être obligatoirement référencées.

Exemples : les mêmes que pour les scripts de quête.

3) Mais, les scripts de résultat de Dialogue de Quête (Topic, Conversation... et tous les autres onglets depuis Topic jusqu'à la fin) SONT des scripts de référence... Les fonctions s'appliquent par défaut à celui qui parle, qui va dire la réponse... Donc on peut ne pas mettre de Reference-Editor-Id, SI c'est celui qui parle qui doit être affecté par la fonction. SINON : il faut la reference.

Exemples (si c'est MarcelRef qui parle, ) :

MarcelRef.kill player (correct, MarcelRef est tué par le PJ, qui commet un crime)
Marcel.kill player (incorrect, ID objet de base au lieu de Reference)
MarcelRf.kill player (incorrect, j'ai fait une faute de frappe)
player.kill MarcelRef (correct, le PJ est tué par MarcelRef, qui commet un crime)
MarcelRef.kill AchilleRef (correct, MarcelRef est tué par AchilleRef, qui commet un crime)...
kill MarcelRef (correct, celui qui parle est tué par MarcelRef non donc il se tue lui même... va t-il aller en prison s'il ressucite ??? J'ai jamais fait çà)
kill AchilleRef (correct, celui qui parle est tué par AchilleRef, qui commet un crime)
kill Player (correct, celui qui parle est tué par le PJ, qui commet un crime)
kill (correct, celui qui parle meurt d'une crise cardiaque, pas de crime)

Nous verrons plus tard...
... Les scripts d'objet et les scripts d'effet magique, sont des scripts de reference... les exemples vus pour les résultats de dialogue sont donc valables pour eux.

4) les scripts d'objet sont des scripts de références, car ils s'exécutent sur les références de l'objet (les instances de classe) auquel on attache le script

5) Les scripts d'effet magique sont aussi des scripts de référence, car ils s'exécutent (les 3 types de sorts) :
a) sur soit, (SELF) ou
b) sur les références touchée (Touch), ou
c) sur les références détectées à distance (Target) dans le rayon désigné.

Remarque importante sur les scripts de référence !!!

Celà semble être "la même chose" de préfixer ou non une fonction pour ces types de script... ! Et bien non...
Pour les scripts de résultat de dialogue, s'il n'y a pas de référence indiquée, j'ai bien écrit que c'est "celui qui parle qui est tué. Pour les scripts d'objet, ce sera le PNJ sur lequel s'exécute le script qui sera tué.

Si on a prit la précaution d'indiquer que seul Marcel peut dire le dialogue, alors oui, c'est équivalent (c'est le rôle de la condition GetIsID pour les objets mono-référence (Comme les PNJ, la plupart des objets de Quête)...ou GetIsReference dans les autres cas.
Si l'on précise MarcelRef en prédicat, se sera toujours MarcelRef qui sera tué, quelque soit celui qui parle...
Pour les scripts d'objet également. Si l'on écrit un script générique pouvant être installé sur plusieurs objets de base, indiquer une référence en prédiquat d'une fonction n'est pas... sans importance.
OUI, nous étudierons tout çà grimace , si j'ai le temps, et si je veux !Pharaon


Dernière édition par Mike89 le Jeu 24 Juil 2008, 00:04, édité 8 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeLun 10 Déc 2007, 17:50

Eagle a écrit:

Le PJ va chercher l'objet et le ramène à Marcel qui lui donne une récompense (comment faire ?) et la quête est terminée.

Là c'est un bon exercice pour savoir si tu as compris...

Les fonctions utiles pour mener à bien la mission
Cela marche avec les PNJ et les Conteneurs car ils ont aussi un inventaire. Et aussi le PJ. Donc ConteneurRef ou PnjRef ou player.
Ces fonctions marchent avec l'EditorID de l'objet Item de bas, car, il n'y a pas de References dans un inventaire, mais des lots de références indiférenciées.
* Pour connaître le nombre d'un type d'objet de base présents dans un conteneur (ou un PNJ ou PJ) :
ConteneurRef.GetItemCount ItemBaseID
* Pour transférer quelque chose d'un conteneur à l'un autre : (ici :du PJ à Marcel ou du conteneur au PJ) ; on le fait en 2 temps :
ConteneurRef.RemoveItem ItemBaseID, Nb ; Nb est le nb d'exemplaires à retirer
ConteneurRef.AddItem ItemBaseID, Nb ; Nb est le nb d'exemplaires à ajouter
Edit : (ou plutôt player.AddItem ItemBaseID, Nb .... si c'est destiné au PJ)

Savoir si le joueur a la clef

On en était resté à l'étape 50, pendant cette étape, le joueur fait ce qu'il veut, mais est sous-surveillance du script de quête. Il peut aller ouvrir le contener et prendre la clef demandée. Pour cela pas de scriptage, le moteur sait faire (touche espace). Mais il faut le détecter grâce au script
Coder dans le script :
Si étape 50
..... Si la clef est dans l'inventaire
.........Set Stage xxMarcelQuest to 60
..... FinSi
FinSi
Parler à Marcel
Lorsque le PJ reviens voir Marcel, comme on n'est plus en Stage 50, Marcel ne devrait plus engueuler le joueur. Le PJ va donc pouvoir lui parler
Créer donc une ligne de réponse avec condition stage 60, et texte... "On m'a prévenu que vous aviez réussi. Donnez-moi la clef, ou je la prend de force !"... Et Passer en stage 70

Répondre à Marcel

Dans le script cette fois :
si on veux faire compliqué :
Si on est en stage 70, envoyer un MessageBOX... Donner la clef OUI NON
Réglez çà comme pour les stages d'acceptation de la mission
Positionner les stages 80 (valeur 0 = oui) ou 85 (valeur 1 = non) selon la réponse du joueur. Puis faire un Say pour lancer les paroles finales de Marcel.

Mais on peut faire très simple :
* pas de MessageBox et on met directement dans le log le message de réussite dela mision
* en script de résultat les échanges clef contre or (Gold001) (pas la peine d'enlever de l'or à Marcel, on suppose qu'il l'avait, sinon, s'il n'en a pas assez, cela complique, mais c'est faisable... reste à gérer la réaction du joueur : message final : J'ai tué Marcel ou je me suis fait avoir ?
* Ne pas oublier StopQuest xxMarcelQuest.

La livraison (Suite de "Faire compliqué")

Etape 80
*Retirer la clef de l'inventaire du PJ, la donner à Marcel.
*Faire un player.AddItem Gold001, 10 (la récompense)
Reponse topic si étape 80 : "Merci, vous avez bien mérité vos 10 PO"
*Passer à l'étape 100

Etape 100
*LogEntry J'ai donné la clef à Marcel. Il était content et ma donné 10 PO.
*En résultat, StopQuest xxMarcelQuest

Essayer de garder la clef

Là c'est un peu plus compliqué... Marcel vous donnera pas d'or... et il va se battre
Etape 85
* LogEntry "J'ai refusé de donner la clef, Marcel va se battre."
* Reponse topic si étape 85 et agressif : "Tu perdras plus que cette clef. Je vais te dépouiller !"
Résultat :
..... xxMarcelRef.ModAv aggression 50
..... xxMarcelRef.ModDisposition player -50 (avec çà, il se battra c'est sûr)
..... xxMarcelRef.Startcombat player
..... SetStage xxMarcelQuest to 90

Etape 90
*Dans le script :
..... If GetStage xxMarcelQuest == 90 && xxMarcelRef.GetDead == 1
.......... Set Stage to 120
..... EndIf
* Dans le topic, on peut gérer des reponses de vociférations diverses... en testant le stage 90 et une variable qui augmente de 1 à chaque topic dit. Faire des xxMarcelRef.Say...

Etape 120
*LogEntry "J'ai refusé de donner la clef et j'ai tué Marcel."
*En résultat, StopQuest xxMarcelQuest

Et c'est fini.

A mettre au propre et à tester bien sûr ! Pharaon

Maintenant, VOS commentaires !


Dernière édition par Mike89 le Lun 04 Aoû 2008, 08:41, édité 1 fois
Revenir en haut Aller en bas
Walzou
Maître ArchipelModeur
Maître ArchipelModeur
Walzou


Masculin Nombre de messages : 2142
Age : 44
Date d'inscription : 23/10/2006

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeMar 11 Déc 2007, 12:12

En tous cas ça m'a l'air bien complet ton tuto, de plus il va également me servir prochainement.
Revenir en haut Aller en bas
http://wteamoblivionmod.ifrance.com
Eagle
Apprenti ArchipelModeur
Apprenti ArchipelModeur
Eagle


Masculin Nombre de messages : 37
Age : 34
Date d'inscription : 06/12/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeMer 12 Déc 2007, 11:29

J'ai fais une partie de la quête, ça marche mais problème: le messagebox "accepter la demande du pirate" se répète tout le temps et celle-ci se déclanche après que la quête est apparue dans mon journal donc cela ne change rien que j'accepte ou pas.
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeMer 12 Déc 2007, 13:11

Eagle a écrit:
J'ai fais une partie de la quête, ça marche mais problème: le messagebox "accepter la demande du pirate" se répète tout le temps et celle-ci se déclanche après que la quête est apparue dans mon journal donc cela ne change rien que j'accepte ou pas.

Vérifies que tu as bien fait les bons "setstage".

Ou plutot que tu as bien mis un "doonce1" par exemple pour faire qu'une fois le messagebox
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeMer 12 Déc 2007, 13:15

Diagramme pour expliquer les enchaînements du script de quête, les stages et les dialogues.
PREMIERE PARTIE : Acceptation de la mission.

Exemple de quête simple pour comprendre sa structure Quete_diagramme1

On va encore dire qu'il y a de la couleur, des trucs en gras et qu'il y a trop de choses grimace . Mais il n'y a pas grand chose de trop !Pharaon
Et ausi qu'il n'y a pas de légende !

Donc LEGENDE :

Boîtes en jaune citron ou jaune pâle, ou texte en rouge : Concerne des actions du moteur de jeu :
* Losanges jaunes : les tests effectués par le moteur de jeu (le premier tout en haut devrait être jaune, il est d'ailleurs en dehors du script...)
*Explications en rouge, et commentaires dans des rectangles jaunes pâles concernent aussi le moteur de jeu.
*Bulles arrondies jaune citron : ce sont des événements (clics) qui sont captés par le moteur de jeu et entrînent selon le contexte des actions du moteur : ici la sélection d'un PNJ puis d'un sujet de dialogue (TOPIC).
*Les grosses flèches courbes rouges signalent les évènements ou commandes qui provoquent l'abandon de la tâche en cours et le retour au moteur de jeu, qui prend la main, et passe à la tâche suivante dans sa liste (ex : lancer le script de la référence suivante ; passer de MenuMode à GameMode... etc.). Cela entraine qu'il ne pourra y avoir retour à l'exécution du script, en reprenant à son début, qu'au plus tôt à la frame suivante... et par défaut au bout de 5 secondes pour un script de quête.
A ce propos : une commande pratique à mettre en début de bloc GameMode (déclarer au préalable Float fQuestDelayTime ) :
....Set fQuestDelayTime to 1.00 ; exécution toutes les secondes (ou mettez ce que vous voulez...
....Set fQuestDelayTime to 0.01 ; exécution assurée à chaque frame.
fQuestDelayTime est une variable paramètre prédéfinie pour chaque cript de quête (il n'y a pas à la déclarer). A n'utiliser qu'avec parcimonie et après mure réflexion, pour ne pas dégrader les performances du jeu...

Le reste concerne ce que vous tapez :

* soit dans la fenêtre du script de quête
... ce script est séparé en séquences qui mettent en évidence tous les débranchements de type "sous-programme", avec retour à l'instruction qui suit celle qui a provoqué le débranchement, ceci dans la même frame. C'est le cas des appels de de stages et de dialogues de la quête.
J'ai matérialisé cela par des petites flèches noires aller-retour horizontales et verticales... un stage peut à son tour appeler un dialogue ou un autre stage, un dialogue appeler un stage... en cascade... selon lles besoins.
... Les losanges noirs mettent en évidence la présence de conditions, qui découpent les séquences du script.

* soit dans les onglets de la fenêtre ouverte par le menu QUEST, et qui sont :
** Onglet Quest Data : j'ai rappelé les options principales ayant une grande importance... ne pas confondre Scn (Script Name), EditorId de la Quête et le Name qui sert au journal. Et aussi la condition, que l'on peut mettre là car dans toute cette quête il n'y a que Marcel qui parle, et qu'il n'y a que Marcel qui peut dire çà....
** Onglet Quest Stage (fond orange foncé)
**Onglet Topics (fond rose)
Les différents fonds verts indiquent les messages Journal (Log) et le texte des réponses (Topic)
Le fond bleu des conditions indique à quoi s'appliquent ces conditions.
Les deux variétés de sous-cadres oranges indiquent les deux types de scripts de résultat : de stage (ou étape de quête) et de dialogue. Attention aux prédicats des fonctions. Ici le prédicat de la fonction ModAV de la dernière réponse n'était pas nécessaire... mais il ne gène pas.
Il n'y a pas ici d'utilisation de l'onglet Quest Target

---------------------------------------
Voilà... c'est dense, mais... utile j'espère.

Vous avez là un condensé des notions du cours d'algorithmique de SupInfo en première année.blbl . Enfin... eux, (les profs de Sup) ils délayent plus chaque notion, mais ils ont le temps, et ils sont payés pour çà. rire2 Plus quelques autres notions. Ce pauvre diagramme m'a coûté une journée de dessin dans photoshop ! Eh oui !

Post-scriptum : j'ai pris quelques libertés avec les règles puristes de l'algorithmique pour rester proche du langage de script utilisé, et dela présentation dans le TESCS... et surtout du non-dit là dedans. Pharaon


Dernière édition par Mike89 le Mar 29 Juil 2008, 21:06, édité 9 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeJeu 13 Déc 2007, 15:19

UP Juste pour signaler que j'ai mis à jour le diagramme du post précédant et ajouté des explications après le diagramme...

Une petite remarque : cette petite quête simple semble compliquée, vu le diagramme.
Mais en réalité cela n'est pas compliqué. Essayez !

Si vous arrivez à faire ce petit début de quête et faire vous-même la fin de quête à l'aide mes remarques, vous pourrez par la suite vous attaquer à n'importe quelle quête. Et aussi comprendre celles de Bethesda... par curiosité voyez comment c'est fait.

Des compléments en vrac :

Une petite nuance, ici, je n'ai fait que tester les stages pour avancer dans la quête ou les dialogues. Mais c'est possible d'utiliser des variables "pertinentes" du script de quête ou de tout autre script, en s'aidant éventuellement de l'une des 360 fonctions de bases du jeu... et + avec l'extension OBSE.

Attention pas de définition de variables (short, long, float, ref) dans un script de résultat. Il faut les déclarer dans le script de quête.

Pour utiliser une variable "Toto" de la quête MarcelQuest (définie par son script MarcelScript) dans un autre script, il faut écrire par exemple MarcelQuest.Toto.
Exemple : If MarcelQuest.Toto == 2 ; etc...
De même dans MarcelQuest, si xxMarcel possède un script d'objet et une variable Titi dans ce script :
Exemples :
If xxMarcelRef.Titi == 0 ; etc...
If xxMarcelRef.GetDisposition player == 100 ; (par exemple envoyer un topic coeur
If xxMarcelRef.GetAv health == 10 ; (par exemple envoyer un topic respect )

Pour l'utiliser dans une "condition" des fenêtres de quête, topic,... il faut utiliser la fonction GetQuestVariable ( faire New, et utiliser les fenêtres déroulantes et boutons tout en bas des conditions) :
Exemple : GetQuestVariable MarcelQuest, Toto == 2

Il n'exite pas de fonction analogue pour tester directement une variable de script d'objet dans une Condition de quête, stage, topic... Mais voici une astuce à mettre dans le Script de quête :
... déclarer Titi, aussi dans le script de quête...
... Set Titi to xxMarcelref.Titi

et voila... tester "Titi" par le GetQuestvariable devient possible... puisqu'on l'a dupliquée dans une variable de quête

Et puis plein d'autres trucs sympas...

-----------------------

Une application commence pour moi à devenir complexe au dela de 500 modules et une cinquantaine de fichiers à gérer...
Ce ne sont pas quelques petits bouts de script qui doivent vous faire peur... accrochez vous ! Pharaon
Moi, j'en ai géré une (application) très compliquée avec 8 à 10 fois plus de modules (4500) et de fichiers (250)... Un module pouvant faire de 50 à 8000 lignes de code. Hé oui, les jeunes ! C'était un progiciel, bien sûr !jesors


Edit Mike : Vous pouvez maintenant discuter de tout çà... Hé ! Ho ! On se réveille !!!
Revenir en haut Aller en bas
kethep
Moddeur
Moddeur



Masculin Nombre de messages : 4
Age : 34
Date d'inscription : 03/07/2008

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeJeu 03 Juil 2008, 19:50

Bonjour a tous salut

j'ai fait une petite quete grace au tuto (très pratique number one ) mais j'ai un petit problème Effrayé :

Commen faire pour qu'une quete s'enchaine a une autre?

"je m'explique: a la guilde des mages par exemple Raminus vous donne une tache a faire et une foi qu'elle est faite il vous dit d'aller voir l'archimage pour la suite.
donc la quete de l'archimage s'enchaine a celle de Raminus. commen faire?"


j'espere avoir été clair.

merci d'avance pour vos réponse

ps: dsl pour l'orthograhe désastreuse
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeJeu 03 Juil 2008, 20:41

kethep a écrit:
Bonjour a tous salut

j'ai fait une petite quete grace au tuto (très pratique number one ) mais j'ai un petit problème Effrayé :

Commen faire pour qu'une quete s'enchaine a une autre?

"je m'explique: a la guilde des mages par exemple Raminus vous donne une tache a faire et une foi qu'elle est faite il vous dit d'aller voir l'archimage pour la suite.
donc la quete de l'archimage s'enchaine a celle de Raminus. comment faire?"


j'espere avoir été clair.

merci d'avance pour vos réponse

ps: dsl pour l'orthograhe désastreuse

Mince, je ne me souvenais même plus avoir écrit çà !!! oups

Pas compliqué : Startquest NomDeLaQuete

Plus de renseignements : StartQuest

Le plus compliqué est de savoir où mettre cette fonction (pour toi c'est simple) :
* Dans le result script du dialogue dans ton cas (lorsque la phrase est dite...hop !)
* dans le result script d'une étape de quête, si le fait d'atteindre par exemple le niveau 50 de la quête A permet de lancer une quête B
* quelque part dans le "script qui va bien", à la suite du test d'une variable ou d'une fonction condition, avec une deuxième variable du genre DoOnce (pour ne faire qu'une fois le start... c'est mieux !)

Exemple :
Code:

short doonce50
...
If player.GetItemCount Gold001 > 10000 && doonce50 == 0
        Set doonce50 to 1
        StartQuest MaSuperQueteQuiTue
EndIf

Facile à comprendre : le script en question est capable de lancer la quête susdite lorsque le joueur possèdera 10 000 pièces d'or...
De quoi rèver, non ?

Volà, savoir comment et où lancer une quête n'est plus qu'une affaire d'imagination... Pharaon
Revenir en haut Aller en bas
kethep
Moddeur
Moddeur



Masculin Nombre de messages : 4
Age : 34
Date d'inscription : 03/07/2008

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeJeu 03 Juil 2008, 21:35

merci beaucoup je vais essayer
Revenir en haut Aller en bas
kethep
Moddeur
Moddeur



Masculin Nombre de messages : 4
Age : 34
Date d'inscription : 03/07/2008

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeMer 23 Juil 2008, 22:59

une autre petite question en raport avec la précédante: quel fonction dois-je encodé après begin de la 2 e quete Question
(en plus claire j'ai intégré dans la quete 1 la fonction startquest et dans le script de la 2e j'ai commancé par begin GameMode mais quand je test les 2 quete se lance en meme temps Triste )

merci d'avance pour vos réponce merci .
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeMer 23 Juil 2008, 23:37

kethep a écrit:
une autre petite question en raport avec la précédante: quel fonction dois-je encodé après begin de la 2 e quete Question
(en plus claire j'ai intégré dans la quete 1 la fonction startquest et dans le script de la 2e j'ai commancé par begin GameMode mais quand je test les 2 quete se lance en meme temps Triste )

merci d'avance pour vos réponce merci .

Aurais-tu pas hazard laissé cochée la case "Start game enabled" pour la deuxième quête ? En ce cas, l'explication est trouvée... il faut la décocher.

Case cochée : la quête démarre dès que le mod qui la crée est ajouté au jeu si la partie est en cours (sinon dès le début d'une nouvelle partie). Case décochée : la quête démarre avec un startquest ou un setstage (script ou console).

Si la case est décochée... je ne vois pas de raison...
Revenir en haut Aller en bas
kethep
Moddeur
Moddeur



Masculin Nombre de messages : 4
Age : 34
Date d'inscription : 03/07/2008

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeLun 28 Juil 2008, 16:55

merci merci désolé j'aurai du y pencé
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeMar 29 Juil 2008, 21:03

kethep a écrit:
merci merci désolé j'aurais dû y penser

De rien, si je peux répondre et deviner les bêtises cachées, c'est que je les ai moi-même toutes faites... enfin presque Pharaon !

Sinon, félicitations, si tu as suivi tout le tuto, et compris mon diagramme, parce que, je le reconnais c'est "hard" et pas simple à expliquer...
désolé

PS : c'était écrit tout en haut du diagramme, au sujet du script de quête :

Si case... cochée ou commande... REPETER jusquà ...
Revenir en haut Aller en bas
Drace
Magicien
Drace


Masculin Nombre de messages : 75
Age : 34
Date d'inscription : 01/08/2008

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeDim 03 Aoû 2008, 17:21

Je n'ai pas bien compris ceci:

Les fonctions utiles pour mener à bien la mission
Cela marche avec les PNJ et les Conteneurs car ils ont aussi un inventaire. Et aussi le PJ. Donc ConteneurRef ou PnjRef ou player.
Ces fonctions marchent avec l'EditorID de l'objet Item de bas, car, il n'y a pas de References dans un inventaire, mais des lots de références indiférenciées.
* Pour connaître le nombre d'un type d'objet de base présents dans un conteneur (ou un PNJ ou PJ) :
ConteneurRef.GetItemCount ItemBaseID
* Pour transférer quelque chose d'un conteneur à l'un autre : (ici :du PJ à Marcel ou du conteneur au PJ) ; on le fait en 2 temps :
ConteneurRef.RemoveItem ItemBaseID, Nb ; Nb est le nb d'exemplaires à retirer
ConteneurRef.AddItem ItemBaseID, Nb ; Nb est le nb d'exemplaires à ajouter.

Pourrais t'on m'expliquer par un exemple ?
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeLun 04 Aoû 2008, 08:57

Drace a écrit:
Je n'ai pas bien compris ceci:

Les fonctions utiles pour mener à bien la mission
Cela marche avec les PNJ et les Conteneurs car ils ont aussi un inventaire. Et aussi le PJ. Donc ConteneurRef ou PnjRef ou player.
Ces fonctions marchent avec l'EditorID de l'objet Item de bas, car, il n'y a pas de References dans un inventaire, mais des lots de références indiférenciées.
* Pour connaître le nombre d'un type d'objet de base présents dans un conteneur (ou un PNJ ou PJ) :
ConteneurRef.GetItemCount ItemBaseID
* Pour transférer quelque chose d'un conteneur à l'un autre : (ici :du PJ à Marcel ou du conteneur au PJ) ; on le fait en 2 temps :
ConteneurRef.RemoveItem ItemBaseID, Nb ; Nb est le nb d'exemplaires à retirer
ConteneurRef.AddItem ItemBaseID, Nb ; Nb est le nb d'exemplaires à ajouter.

Pourrais t'on m'expliquer par un exemple ?


Un exemple : supposons qu'il existe un pnj dans le mod dont la référence est MarcelRef.
Supposons que dans un dialogue, Marcel accepte de donner au PJ 10 Po s'il en a plus de 100, voilà le script de résultat :

If MarcelRef.GetItemCount Gold001 > 100
MarcelRef.RemoveItem Gold001, 10
player.AddItem Gold001, 10
EndIf

Il est possible pour plus de détail de sortir la condition dans le dialogue :
Supposons un topic "T'as pas 10 balles ?" (question qui pourra être posée à Marcel dans sa liste de sujets)...
Deux reponses possibles :

1) Condition de la réponse"GetItemCount Gold001 > 100" à mettre dans les conditions de la réponse 1...
Réponse : " Ha, oui pas de problème !"
Result script :
MarcelRef.RemoveItem Gold001, 10
player.AddItem Gold001, 10
2) Condition de la réponse"GetItemCount Gold001 <= 100" à mettre dans les conditions de la réponse 2...
Réponse : " Non, désolé, il ne me restera pas assez pour acheter un cadeau à ma femme !"
Result script :
Rien !
Revenir en haut Aller en bas
Drace
Magicien
Drace


Masculin Nombre de messages : 75
Age : 34
Date d'inscription : 01/08/2008

Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitimeLun 04 Aoû 2008, 12:33

Merci beaucoup je comprend mieux maintenant Très content.
Revenir en haut Aller en bas
Contenu sponsorisé





Exemple de quête simple pour comprendre sa structure Empty
MessageSujet: Re: Exemple de quête simple pour comprendre sa structure   Exemple de quête simple pour comprendre sa structure Icon_minitime

Revenir en haut Aller en bas
 
Exemple de quête simple pour comprendre sa structure
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Une quête presque trop facile pour débutants
» Problème d'affichage d'objet/structure...
» [TUTO] Dialogue et quête
» Les quêtes, scripts de quête et de résulats en un diagramme
» [Prb]Débuter une Quête...

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum WTeam :: Public :: Tutos TESCS2 Oblivion :: Les scripts, dialogues et quêtes.-
Sauter vers: