Forum WTeam Le site des moddeurs 100% francophone. |
|
| Exemple de quête simple pour comprendre sa structure | |
| | Auteur | Message |
---|
Eagle Apprenti ArchipelModeur
Nombre de messages : 37 Age : 34 Date d'inscription : 06/12/2007
| Sujet: Exemple de quête simple pour comprendre sa structure Jeu 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 ! | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Ven 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... , oui, les 360 ! Euh, sauf 1 ) 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:
Par exemple dupliquez AntusOdiil, 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...)
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:
Il existe des quêtes du jeu original avec "Start Game Enabled" coché, et qui comportent un script : StartUpQuest avec son script : StartUp ! Ce Script démarre ce qu'il faut pour que le player ait une liste de topic (sujets de dialogues) autorisés avec les PNJ, ajoute un mapmarker puis se stoppe lui même. De même MQ00, MG00,... (Main Quest, Mage Guild)... etc.
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 SOLUTIONPour 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... 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 !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 TESCSShort 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 blocSauver le script... Si aucun message d'erreur n'apparait, vous aussi vous êtes sauvé ! Sinon... DEBUGUER LE SCRIPT 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 ! ) * StartQuest MarcelQuest * StopQuest MarcelQuest ; co MY LADY ! 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 DEBUGA 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 TARDNormalement il ne devrait pas y avoir de question... sinon : !
- 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 | |
| | | Eagle Apprenti ArchipelModeur
Nombre de messages : 37 Age : 34 Date d'inscription : 06/12/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Ven 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. | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Ven 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 ...EndIfEnd ; fin de blocEDIT 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 | |
| | | Eagle Apprenti ArchipelModeur
Nombre de messages : 37 Age : 34 Date d'inscription : 06/12/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Sam 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. | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Dim 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 | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Dim 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:
Moi j'ai mis une clef, xxMarcelKey, et un tonneau (container). Et xxMarcelKeyRef cachée dans le tonneau. Pourquoi ? (Marcel ne le dit pas, mais moi, je le sais : il l'a cachée là, et ne peut pas y aller lui même, parce qu'il est recherché par les gardes). C'est la clef de la banque de Chorrol... Y'a pas de banque ? Alors, elle va bientôt s'installer, c'est sûr ! Facile ! 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:
* La fonction "Say" fait parler le pnj appelant automatiquement, sans avoir à cliquer sur le sujet. La bonne réponse est sélectionnée en fonction de l'étape (stage) au moment du Say. * Le résultat serait le même en utilisant une variable Short, et en l'augmentant au fur et à mesure de l'avancée du dialogue. Comme çà on ne gaspillerait pas les étapes (Toujours 20 pour cette étape préléminaire). Dans ce cas on aurait 2 messages possibles dans la log de l'étape 20, en fonction du n° de message au moment du setstage 20. On passerais alors à l'étape 30 si c'est Non (fin de quête), 40 si c'est Oui. 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:
Il y a plein de façon de faire. Plutôt que de tester les stages, on pourrait tester des variables de la quête avec la fonction GetQuestVariable... pratique pour conserver les résultats détaillés et les tester n'importe où dans le jeu... On verra quand vous serez assez avancés. 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:
Attention... ID du Marcel de base avec GetIsID, c'est mieux que d'utiliser GetIsReference xxMarcelRef ==1. Cela marcherais aussi, mais la recherche des dialogues par le menu Character/Filtered Dialogue, ou par le bouton Dialogue du formulaire NPC ne marche pas avec GetIsReference... Et comme on n'a qu'une reference par PNJ, normalement c'est équivalent de tester l'un ou l'autre... ET UNE SEULE REFERENCE PAR NPC C'EST TRES RECOMMANDE, sauf si on sait ce que l'on fait. 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 | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Dim 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 presque 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, SayCependant, à 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étailNote 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:
C'est nul de faire comme çà. Il faut mettre Achille en colère contre Marcel ( Diminuer Disposition < augmenter Aggression de Achille, et diminuer la Fatigue et la santé de Marcel pour être sûr du résultat. Lui faire rechercher Marcel avec un package... En plus lors d'un gros coup d'épée magique spéciale, on peut lui faire sauter sa cuirasse à Marcel, le casque... non pas le short, les apprentis psychopathe , cela ne l'affaiblira pas plus. (enfin, c'est vous qui voyez, hein, c'est votre écran, moi je ne donne qu'un avis technique... je retire le " psychopathe" . Pitié, Psychopathe, c'est bien aussi !) Et puis, d'abord, le pagne ne s'enlève pas. Il faut changer de NIF. Oui, pour les femmes aussi ! Mais avec OBSE... (drôle de nom d'ailleurs pour une extension, non... 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:
Venez pas me dire en chouinant : Ouinnn ! Mon perso il est tué, et pourtant c'est bon... non c'est pas bon (et toi non plus, t'est pas bon ! ). Si la compilation est bonne, le programme n'est pas forcément bon . Et je ne suis pas bourré non plus. Bethesda, dans sa grande bonté a prévu çà : Complément.Kill sujet. Il faut donc comprendre Complément est tué par sujet (complément d'agent)... donc au passif. Oui, la grammaire, celà aide. Je devance la question qui n'est pas encore posée : c'est Resurrect ou Resurrect 1 - Voir wiwiki. 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 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 çà , si j'ai le temps, et si je veux !
Dernière édition par Mike89 le Jeu 24 Juil 2008, 00:04, édité 8 fois | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Lun 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 missionCela 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 clefOn 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 à MarcelLorsque 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 à MarcelDans 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 ! Maintenant, VOS commentaires !
Dernière édition par Mike89 le Lun 04 Aoû 2008, 08:41, édité 1 fois | |
| | | Walzou Maître ArchipelModeur
Nombre de messages : 2142 Age : 44 Date d'inscription : 23/10/2006
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Mar 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. | |
| | | Eagle Apprenti ArchipelModeur
Nombre de messages : 37 Age : 34 Date d'inscription : 06/12/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Mer 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. | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Mer 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 | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Mer 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.
On va encore dire qu'il y a de la couleur, des trucs en gras et qu'il y a trop de choses . Mais il n'y a pas grand chose de trop ! 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. . Enfin... eux, (les profs de Sup) ils délayent plus chaque notion, mais ils ont le temps, et ils sont payés pour çà. 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.
Dernière édition par Mike89 le Mar 29 Juil 2008, 21:06, édité 9 fois | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Jeu 13 Déc 2007, 15:19 | |
| 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 If xxMarcelRef.GetAv health == 10 ; (par exemple envoyer un topic ) 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 ! 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 ! Edit Mike : Vous pouvez maintenant discuter de tout çà... Hé ! Ho ! On se réveille !!! | |
| | | kethep Moddeur
Nombre de messages : 4 Age : 34 Date d'inscription : 03/07/2008
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Jeu 03 Juil 2008, 19:50 | |
| Bonjour a tous j'ai fait une petite quete grace au tuto (très pratique ) mais j'ai un petit problème : 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. d'avance pour vos réponse ps: dsl pour l'orthograhe désastreuse | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Jeu 03 Juil 2008, 20:41 | |
| - kethep a écrit:
- Bonjour a tous
j'ai fait une petite quete grace au tuto (très pratique ) mais j'ai un petit problème :
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.
d'avance pour vos réponse
ps: dsl pour l'orthograhe désastreuse Mince, je ne me souvenais même plus avoir écrit çà !!! Pas compliqué : Startquest NomDeLaQuetePlus de renseignements : StartQuestLe 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... | |
| | | kethep Moddeur
Nombre de messages : 4 Age : 34 Date d'inscription : 03/07/2008
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Jeu 03 Juil 2008, 21:35 | |
| merci beaucoup je vais essayer | |
| | | kethep Moddeur
Nombre de messages : 4 Age : 34 Date d'inscription : 03/07/2008
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Mer 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 (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 ) merci d'avance pour vos réponce . | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Mer 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
(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 )
merci d'avance pour vos réponce . 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... | |
| | | kethep Moddeur
Nombre de messages : 4 Age : 34 Date d'inscription : 03/07/2008
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Lun 28 Juil 2008, 16:55 | |
| merci j'aurai du y pencé | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Mar 29 Juil 2008, 21:03 | |
| - kethep a écrit:
- merci 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 ! 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... PS : c'était écrit tout en haut du diagramme, au sujet du script de quête :
Si case... cochée ou commande... REPETER jusquà ... | |
| | | Drace Magicien
Nombre de messages : 75 Age : 34 Date d'inscription : 01/08/2008
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Dim 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 ? | |
| | | Mike89 Maître ArchipelModeur
Nombre de messages : 3151 Age : 68 Date d'inscription : 06/03/2007
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Lun 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 ! | |
| | | Drace Magicien
Nombre de messages : 75 Age : 34 Date d'inscription : 01/08/2008
| Sujet: Re: Exemple de quête simple pour comprendre sa structure Lun 04 Aoû 2008, 12:33 | |
| Merci beaucoup je comprend mieux maintenant . | |
| | | Contenu sponsorisé
| Sujet: Re: Exemple de quête simple pour comprendre sa structure | |
| |
| | | | Exemple de quête simple pour comprendre sa structure | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|