Affichage des résultats 1 à 3 sur 3

Discussion: [TUTORIEL] LE KIT DE SURVIE - CHAPITRE 6 : Savoir manipuler un script

  1. #1
    Date d'inscription
    décembre 2007
    Localisation
    Dordogne
    Messages 
    1 141

    Flèche [TUTORIEL] LE KIT DE SURVIE - CHAPITRE 6 : Savoir manipuler un script


    LE KIT DE SURVIE DU MODDER DEBUTANT
    Ou comment survivre dans la jungle quand on est un puceau du tp2



    Chapitre 6 : Savoir manipuler un script




    Avant propos


    Et oui déjà au chapitre 6 !
    Certains d'entre vous pourront me faire remarquer que je m'étais arrêté au chapitre 4 la dernière fois, mais je me réserve ce chapitre 5 dédié à l'ajout de nouvelles répliques dans les dialogues existants pour plus tard. D'une part parce que je commence à me lasser de tutorialiser sur les dialogues mais aussi et surtout parce que je pense qu'aborder le problème des scripts est beaucoup plus urgent dans l'immédiat.
    Les scripts couvrent des domaines vraiment très larges et on a beau être limité par certaines contraintes du moteur du jeu, on peut vraiment envisager beaucoup de choses en termes de réalisation grâce à cet outil. Faire un tutoriel très exhaustif qui couvre tous les cas de figures relèverait de l'utopie mais nous allons essayer de vous donner les armes pour parvenir à comprendre comment tout ça marche et quels types de manipulations on peut envisager.



    Préparation


    On ne change pas une équipe qui gagne. Vous allez avoir encore une fois besoin de votre éditeur de texte favori et bien sur d’IESDP plus que jamais avec de préférence un onglet pour les triggers et un autre pour les actions. Vos aller-retour sur ces différents onglets risquent d’être extrêmement fréquents. En bonus je vous suggère d’ouvrir Near Infinity, pour explorer les scripts y’a pas mieux et qui plus est je vais m’en servir dans ce tutoriel donc autant être armé. Enfin j'ai une fois de plus mis à jour mon mod moine (le mod que vous avez pu découvrir lors de mon tuto sur les dialogues), en étoffant un peu la partie script : cette v3 est disponible ici.



    Étape 1 : Écrire un script, les bases

    a) Les différents types de scripts

    Alors avant de démarrer on va aborder les différents types de scripts que vous pourrez rencontrer.

    Scripts de personnages :




    Ce sont les scripts qui s’appliquent lorsque le personnage ayant le script dédié est en jeu. Il peut s’agir d’un PNJ, d’un PNJ recrutable, d’une créature invoquée ou même d’une créature invisible, voire d’un cadavre. C’est le script que vous utiliserez le plus souvent vu que c’est le plus léger et le plus modulable.


    Scripts de zones :




    Même principe pour les cartes, tant qu’un personnage joueur se trouve dans cette zone alors le script s’exécute. A manipuler avec prudence car c’est un script qui va tourner en permanence et que beaucoup de moddeurs (bien souvent amateurs ou sur des vieux mods) auront tendance à utiliser, voire à sur-utiliser. Pourquoi ? Parce que c’est plus simple. Ce script ne nécessitant pas de création de créatures, d’objets, de sorts ou de région particulière qui détermine un piège ou une partie du décor susceptible d’implanter un événement sous certaines conditions.


    Script de region trigger :




    Si vous avez consulté mon tuto sur la création de travel triggers vous devez déjà savoir ce que c’est : ce sont des zones créées sur une carte qui permettent de déclencher des évènements lorsque l’on clique/passe dessus (piège, affichage de texte, génération de créatures ou autre). Il est donc possible de leur assigner des scripts, et c’est ce que font d’ailleurs systématiquement les pièges. Je vous invite à vous balader dans l’onglet trigger d’Infinity Explorer, lorsque vous ouvrez une zone avec ce logiciel, cela peut être très riche en information.
    Puisqu’on peut cibler un endroit en particulier et que le script ne se déclenchera que si on s’approche ou si on clique sur ce point (quand cela nous est proposé) le script par region trigger reste très intéressant. Seul bémol : il faut bien sûr s’assurer que notre région ne chevauche pas une autre région existante, ce qui pourrait être la source de conflit.


    Script universel :


    L’infini te happe, l’infini te suit comme dirait l’autre...

    Comme son nom l’indique, il s’agit d’un script qui s’appliquera en permanence. A priori on pourrait penser que c’est la solution idéale mais comme je l’ai dit plus haut, il faut dans la mesure du possible s’assurer qu’un script soit effectif le moins longtemps possible. Ça évite les conflits comme les ralentissements. De plus, tout mettre dans un script universel ralentit le jeu de manière presque automatique. Le script universel n’est à utiliser que lorsqu’aucun des autres types de scripts ne peut parvenir à réaliser ce que vous voulez faire.


    Question du noob : tout ça c’est bien beau mais comment on écrit un script ? Quel fichier utiliser ?

    Il suffit de créer un fichier .txt et de le renommer en .baf. Vous pouvez aussi réutiliser l’un de vos fichiers .d en le copiant et en le renommant vu que ce sont tous deux des fichiers textes non cryptés. Les fichiers .baf sont une version lisible (non compilée) des fichiers .bcs (script) qu’utilise le jeu, comme les fichiers .d sont une version lisible des fichiers .dlg (dialogue).




    b) Quelques mécanismes simples à connaitre

    Écrire des scripts peut être assez simple lorsqu’on se cantonne à un usage « courant » mais peut être également assez compliqué quand on cherche à réaliser quelque chose de plus inhabituel. Mais quel que soit le degré de complexité du script, on peut résumer son fonctionnement ainsi :

    SI
    Certaines conditions sont vérifiées
    ALORS
    Certains évènements se produiront
    Comme je vous en ai déjà parlé à plusieurs reprises au fil de mes tutoriels, les scripts sont écrits à partir des conditions et des actions qui peuvent exister et qui sont référencées dans IESDP ici et ici. Les conditions vérifiant les évènements et les actions permettant d’en produire, nous allons en voir quelques exemples courants afin que vous puissiez vous faire une idée de comment procéder.
    Dernière modification par Freddy_Gwendo ; 29/03/2016 à 09h09. Motif: Modification du titre de la discussion et mise en page

    http://toutlemondesontrolistes.blogs...nitiation.html
    Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe

  2. #2
    Date d'inscription
    décembre 2007
    Localisation
    Dordogne
    Messages 
    1 141
    Étape 2 : Écrire un script, comment ça se passe


    1) Script d’implantation de créature :

    Qu’il s’agisse d’un mod PNJ, d’un mod améliorant la difficulté, d’un mod de quête, d’un mod marchand ou même pourquoi pas d’un mod de kits, le script d’implantation de créature est plus ou moins incontournable. De plus, cela constituera un bon exemple pour débuter, mais voyons plutôt :




    Ici, je prends pour exemple un script que vous avez déjà peut être exploré, c’est le script de la zone AR0700 (Promenade de Waukyne) précédente version du mod moine. En explorant un peu le tp2 du mod, vous pourrez remarquer que ce script va éditer le script original de AR0700 et y rajouter du contenu. Le dit contenu est déjà assez bien annoté mais nous allons essayer d’aller un peu plus loin dans la compréhension de ce type de script.

    IF

    Littéralement « si », tout ce qui va suivre indiquera quelles conditions doivent être remplies pour que le bloc suivant s’exécute. Si ne serait-ce qu’une condition n’est pas remplie alors le bloc bloquera, ah ah ah... (oui je sais ce n’est pas digne de moi mais lors de la rédaction de ce tuto il était tard...)


    Global("#VMonksAppears","GLOBAL",0)

    Le trigger Global est l’un des grands incontournables, il est même probable que ce soit le trigger que vous utiliserez le plus souvent. Le principe de ce trigger est simple : on implante une variable lorsqu’un évènement se produit afin de pouvoir vérifier par la suite qu’il s’est produit.
    Ici la fonction Global vérifie la valeur du premier argument entre guillemets : c’est le nom de la variable. Puis il vérifie le deuxième argument, le type « GLOBAL » s’appliquant n’importe où, le type « AREA » (par exemple « AR0700 ») ne s’appliquera que sur la Promenade de Waukyne et enfin le type « LOCALS » ne s’appliquant que pour des évènements ne concernant que le groupe ou la créature à laquelle il s‘applique (romance, friendship, flirtpack).
    Enfin, le troisième argument vérifie la valeur de la variable; où on en est au niveau des évènements.
    Prenons ici l’exemple de la variable « #VMonkAppears » :

    · A zéro la variable n’existe pas encore.
    · A un les moines apparaissent.
    · A deux les moines disparaissent.

    Dans l’idéal mieux vaut créer une variable par évènement afin d’éviter les confusions mais après tout c’est vous qui allez coder là dessus. Tant que vous restez cohérent et que vous y retrouvez, libre à vous.

    THEN
    RESPONSE #100


    Littéralement « alors », tout ce qui va suivre indiquera quelles actions doivent être remplis pour que le bloc s’exécute. Les actions s’exécutent et continueront à s‘exécuter tant que les conditions sont vraies.

    SetGlobal("#VMonksAppears","GLOBAL",1)

    C’est le pendant « actions » de la fonction Global de tout à l’heure. Si le trigger Global vérifiait la valeur de la variable, ici on affecte une valeur à cette variable. Attention pas de confusion ici ,ce n’est pas une addition, on ne rajoute pas 1 à cette variable. Non, on décide arbitrairement de la valeur numérique de la variable (j’ai mis 1 mais j’aurais pu mettre 4, 12, 36...).
    On peut noter sur cette action que j’ai mis 1 sur une variable qui était à 0, toute variable étant à 0 par défaut. En la mettant à 1 j’évite que le script ne tourne en boucle et génère des créatures à l’infini. De plus j’ai implanté cette variable avant de générer les actions, ce qui évite que les actions se génèrent deux fois parce que la variable n’aura pas eu le temps d’être initialisée.


    SetGlobal("#VDebatEnrichissant","GLOBAL",1)

    De même, on implante une autre variable pour les dialogues ; à une certaine valeur, un dialogue s’initiera, à une autre il cessera, à encore une autre peut être un autre dialogue pourra être lancé.


    CreateCreature("#VMonk86",[1178.731],2)

    Encore une action extrêmement utilisée, c’est celle que vous avez le plus de chances de retrouver dans les scripts. On implante la créature en indiquant entre guillemets la référence du fichier créature, puis on indique entre crochets sa position sur la carte sur un axe x/y (abscisse/ordonnée, ou plus vulgairement horizontal/vertical).
    Pour obtenir ces coordonnées, vous pouvez soit appuyer sur x dans le jeu sur l’un de vos persos, sur la carte dédiée pour obtenir cette valeur dans la fenêtre de dialogue, soit recourir à une méthode plus propre comme indiqué dans ce tuto.
    Enfin en tout dernier vous déterminez le « facing », c’est à dire dans quelle position le personnage sera tourné. Voici une liste détaillée pour mieux vous repérer :

    0 Sud
    1 Sud/Sud-ouest
    2 Sud-ouest
    3 Ouest/Sud-ouest
    4 Ouest
    5 Ouest/Nord-Ouest
    6 Nord-Ouest
    7 Nord/Nord-ouest
    8 Nord
    9 Nord/Nord-Est
    10 Nord-Est
    11 Est/ Nord-Est
    12 Est
    13 Est/Sud-Est
    14 Sud-Est
    15 Sud/Sud-Est



    2) Script de créature :

    Tout à l’heure nous avons généré des créatures par le script de zone, maintenant nous allons les faire disparaître purement et simplement une fois le dialogue terminé. Mais ici nous n’allons pas utiliser un script de zone qui comme je l’ai indiqué plus haut est à utiliser avec précaution. Non, nous allons utiliser un script de créature beaucoup plus souple et adaptable même s’il comporte quelques inconvénients.



    Avant de voir ce qui nous intéresse, attardons nous cinq minutes sur ce bloc préliminaire : c’est le bloc qui va permettre de déclencher le dialogue. En effet, si une simple variable judicieusement placée dans le fichier .d suffit à assurer que le dialogue se produise si CHARNAME l’initie, cela nécessite des manipulations plus poussées si l’on veut que le dialogue se déclenche tout seul (quand CHARNAME surprend une conversation ou qu’un PNJ l’aborde par exemple). Je fais l’impasse sur les actions/conditions que nous avons déjà vues pour plutôt me concentrer sur ce qu’il y a de neuf.


    ActionOverride("#VMonk86",StartDialogueNoSet(Player1))

    La commande ActionOverride va nous permettre de « cibler » quelque chose sur une action. Ici donc, le premier argument va cibler une créature (#Vmonk86) et va lui dire d’initier le dialogue avec un autre personnage. Ici, il s’agit de player1 donc de CHARNAME.





    Wait(1)

    Pour chaque bloc, le script est lu de haut en bas, les actions s’exécuteront donc l’une après l’autre. Mais pour des soucis de rythme, de synchronisation, voire de mise en scène, il peut être nécessaire de laisser un petit temps d’attente entre certaines actions ou suites d’actions. Le wait va déterminer via la valeur entre parenthèses, le nombre de secondes ou le script va se « suspendre » temporairement.

    ActionOverride("#VMonk86",DestroySelf())

    Même système que précédemment : la commande ActionOverride va nous permettre de « cibler » quelque chose sur une action. Ici donc le premier argument va cibler une créature (#Vmonk86) et va lui dire de se « détruire », autrement dit de disparaitre.
    Pour l’exemple, un simple DestroySelf()) détruirait #VMonk86, on pourrait d’ailleurs s’en contenter puisque nous sommes dans le fichier .baf du fichier .cre #VMonk86, le ActionOverride n’a été placé ici qu’à titre d’illustration. En revanche, il est nécessaire pour les autres créatures.



    Conclusion

    Je n’ai bien sûr pas tout abordé, mais je pense vous avoir fourni les bases pour commencer à construire des scripts. Le mieux maintenant pour vous sera d’explorer les fichiers .bcs du jeu avec Near Infinity ou Infinity Explorer par exemple pour voir comment les créateurs du jeu ont pu s’y prendre en fonction des situations.

    Pour vous perfectionner, je ne saurais que trop vous recommander le complete scripting guide, c’est en anglais mais c’est la référence en la matière et ça vaut vraiment le coup d’y jeter ne serait qu’un coup d’œil. Je vous souhaite bon courage (vous en aurez besoin) et je vous invite à poster à la suite de ce topic si jamais vous avez des questions, parfois la solution est toute proche...
    Dernière modification par Freddy_Gwendo ; 29/03/2016 à 09h19.

    http://toutlemondesontrolistes.blogs...nitiation.html
    Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe

  3. #3
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 089
    Pour les ceusses qui se désolaient, j'ai actualisé les liens des images.

    Bonne lecture.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/03/2016, 07h29
  2. Réponses: 2
    Dernier message: 29/03/2016, 07h19
  3. [TUTORIEL] LE KIT DE SURVIE - CHAPITRE 2 : Le fichier cre
    Par Armand dans le forum Guides, tutoriels
    Réponses: 2
    Dernier message: 29/03/2016, 07h10
  4. [TUTORIEL] LE KIT DE SURVIE - CHAPITRE 1 : Introduction au modding
    Par Armand dans le forum Programmation WeiDU
    Réponses: 1
    Dernier message: 23/03/2016, 22h56
  5. [Tutorial] Comment customiser son bureau ?
    Par Egrevyn dans le forum Informatik'
    Réponses: 0
    Dernier message: 23/11/2005, 09h10

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251