Affichage des résultats 1 à 10 sur 10

Discussion: [SCRIPT] Comment insérer une référence à un nouveau texte dans un script ?

  1. #1
    Sous Nain Invités

    [SCRIPT] Comment insérer une référence à un nouveau texte dans un script ?

    J'aimerais pouvoir utiliser des textes dans mes scripts avec des commandes comme DisplayString, Shout...
    Bien sûr ( ) ce sont des textes et des scripts que je rajoute, et il faut que cela soit fait avec WeiDU.

    La question est donc : comment faire ?

    Dans le même ordre d'idées j'aimerais pouvoir afficher une description détaillée des scripts que j'ajoute, comme c'est fait dans le mod Solaufein... mais je ne comprends pas comment il fait.

    Enfin un truc tout bête j'aimerais savoir comment fonctionne exactement la fonction compile de WeiDU qui permet entre autre de compiler des scripts, afin de pouvoir faire compiler puis copier dans le dossier /scripts par un fichier .tp2.

    Merci ! :notme2:

    PS : Désolé si tout ça a déjà été demandé, j'ai fait plusieurs recherches mais j'ai l'impression que ça n'a pas très bien marché : je n'ai eu aucun résultat avec le mot "script" -_o
    Dernière modification par Freddy_Gwendo ; 03/04/2016 à 03h16. Motif: Modification du titre de la discussion

  2. #2
    Mathrim Cauthon Invités
    Pour la première question, je dirais qu'il faut créer le fichier BAF du script, en laissant le DisplayString en toute lettre. Puis, dans le fichier TP2 de ton mod, tu te contentes d'écrire la ligne :
    COMPILE ~MonMod\MonScript.BAF~ (en adaptant selon l'arborescence de ton mod).
    Le nouveau script sera automatiquement compilé, les lignes de textes du DisplayString seront ajoutées au dialog.tlk, et le script compilé sera copié dans le répertoire override

    Pour Solaufein, je n'ai malheureusement pas le mod sous la main, donc je pourrais difficilement te l'expliquer.

  3. #3
    Sous Nain Invités
    J'ai essayé ce que tu me dit mais j'ai du me planter quelque part car ça ne marche pas -_o

    Voici le code :
    dans le tp2 :
    Code:
    COPY ~override/sa-cont.bcs~       ~scripts/sa-cont.bs~
      //REPLACE ~999001~ @220
    dans le script :

    Code:
    IF
      HotKey(V)
    THEN
      RESPONSE #100
        SetGlobal("sacont", "LOCALS", 0)
        SetGlobal("sachco", "LOCALS", 0)
        DisplayString("blablabla")
        //Shout(999001)
        PlaySound("CAS_P07")
    END
    Et lorsque j'appuie sur V, j'entends le son, mais rien ne s'écrit.
    J'ai donc essayé une autre méthode (en fait celle utilisé dans solaufein pour mettre la description du script que j'ai finis par comprendre), c'est à dire de mettre un n° de chaîne abérant que je puisse retrouver pour le remplacer par la suite par le bon. Sauf que le n° de chaine doit changer au moment de la compilation (peut-être en hexa ?), donc ça marche pas. En tout cas j'ai laissé en commentaire ce que j'avais utilisé pour cette deuxième méthode.

    Par contre ça marche très bien pour la description du script avec le code qui suit :

    Code:
    APPEND ~scrpdesc.2DA~             ~SA-CONT 999011 999012~
    
    COPY_EXISTING ~scrpdesc.2da~ ~override/scrpdesc.2da~
      REPLACE ~999011~ @200
      REPLACE ~999012~ @201
    Une idée ?
    Dernière modification par Freddy_Gwendo ; 08/04/2016 à 15h25.

  4. #4
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages
    6 287
    Je pense que tu as mal interprêté l'utilisation de Shout(). Voici un extrait de IESDP le concernant:
    106 Shout(I:ID*SHOUTIDS)
    Is used to shout something from Shoutids. If you dont have TOB, there is no SHOUTIDS. However, you can use any number you want for the shout ID. Note that, if a character is magically silenced, he cannot shout. It is used in conjuction with Heard(O:Object*,I:ID*), a trigger.

    Code:
    IF
       StateCheck(Myself,STATE_POISONED)
    THEN
         RESPONSE #100
           Shout(4010)
    END
    
    IF
       Heard([GOODCUTOFF],4010)
       HaveSpell(CLERIC_SLOW_POISON)
    THEN
         RESPONSE #100
           Spell(LastHeardBy(),CLERIC_SLOW_POISON)
    END
    Autrement dit, la valeur utilisée dans Shout est un nombre, mais il ne désigne pas du tout un texte. Donc il ne faut pas utiliser REPLACE car (1) ça ne sert à rien (2) ça pourrait même planter le script.
    Shout() s'utilise en conjonction avec Heard() pour déclencher des réactions de la part d'autres personnages. Il s'agit d'un mécanisme utilisé pour provoquer des réactions de groupe (devenir hostile, fuir en cas de combat, ...).
    Dernière modification par Freddy_Gwendo ; 12/04/2016 à 20h44. Motif: Mise en page
    Peu disponible
    Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
    Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !

  5. #5
    Sous Nain Invités
    En gros c'est plutot ce qui régis les communications inter-AI (entre gros guillemets )
    Bon ça me dit pas comment je dois faire mais au moins je sais que ça pas la peine de cherche là

    Il ne reste plus qu'à m'y remettre

  6. #6
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages
    6 287
    Pour ce qui est de l'affichage d'un texte avec DisplayString() (si c'est là ton problème, car je ne comprends pas ce que tu veux dire), il doit s'agir encore d'une erreur d'utilisation. Dans un script, il faut toujours préciser au dessus de qui le texte doit s'afficher, par exemple la personne associée au script. Il faut alors utiliser la forme:
    DisplayString(Myself,"texte à afficher")

    Là encore, je t'invite à consulter la référence sur les commandes de script qui est présente sur le site IESDP :
    151 DisplayString(O:Object*,I:StrRef*)
    Displays a dialog.tlk reference* number in the message window on the object specified. So if I wanted my character to display 'quaffs a potion' in the message window when he drinks a potion of extra healing, I would use:

    Code:
    IF
        HasItem("potn52",())
        HPPercentLT((),50)
    THEN
        RESPONSE #100
            UseItem("potn52",())
            DisplayString((),46150)
    END
    (Note this action is different than the DisplayStringHead(OBJECT,STRING) action which displays text over their head instead.
    Comme indiqué, tu peux choisir entre DisplayString() et DisplayStringHead() selon l'endroit où tu souhaites que le texte s'affiche.
    Dernière modification par Freddy_Gwendo ; 08/04/2016 à 15h26. Motif: Mise en page
    Peu disponible
    Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
    Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !

  7. #7
    Sous Nain Invités
    Ok donc à priori la technique "je met 9999999 puis je remplace" devrait marcher... j'ai pas eu le temps d'essayer depuis mais j'essaye de voir ça.

    Sinon pour ce que je veux c'est tout simplement faire afficher un texte dans la fenêtre d'état depuis un script.

    Ouala...

  8. #8
    Date d'inscription
    April 2003
    Messages
    979
    Voilà un exemple pour les scripts, je fais comme ça et ça fonctionne :

    Dans le fichier .tp2 :

    Code:
    COPY ~Mod\Scripts\script.bcs~ ~override\script.bcs~
      REPLACE ~777778~ @114
      REPLACE ~777779~ @115
    Dans ce script associé au personnage (exemple) :

    Code:
    IF
      Allegiance(Myself,ENEMY)
      !Detect(NearestEnemyOf(Myself))
      !Detect(Player1)
      !Range(Player1,20)
    THEN
      RESPONSE #100
        ForceSpell(Player1,WIZARD_DIMENSION_DOOR)
        DisplayStringHead(Myself,777779)
    END
    Dernière modification par Freddy_Gwendo ; 08/04/2016 à 15h28. Motif: Mise en page

  9. #9
    Sous Nain Invités
    Ok ça marche nickel, merci beaucoup

    EDIT : en décortiquant le script de changement d'avatar je me rend compte que :
    1) Pour utiliser une chaîne de caractère d'un fichier .tra dans un script il suffit de mettre @XXX où XXX est le n° dans le .tra.
    2) Il est possible de faire appel à n'importequel sort depuis un script (outre ceux de Spell.ids) avec une des commandes SpellRES(S:RES*,O:Target) où S est la référence du fichier sort et O la cible.

  10. #10
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages
    3 140
    Juste une précision :

    Il est possible depuis bien longtemps d'écrire directement un nouveau texte dans un script, à condition de l'inclure dans un fichier .TRA, comme ceci :

    Code:
    IF
      Allegiance(Myself,ENEMY)
      !Detect(NearestEnemyOf(Myself))
      !Detect(Player1)
      !Range(Player1,20)
    THEN
      RESPONSE #100
        ForceSpell(Player1,WIZARD_DIMENSION_DOOR)
        DisplayStringHead(Myself,@115)
    END
    CARPE DIEM...

    Moddeur qui s'arrache les cheveux...

Discussions similaires

  1. L'utilisation des animaux
    Par Orbital dans le forum Les Archives du Comptoir
    Réponses: 155
    Dernier message: 21/06/2007, 19h12
  2. [BGT] Certains textes en anglais
    Par liviou2004 dans le forum Baldur's Gate Reloaded : les mods TUTU et Baldur's Gate Trilogy
    Réponses: 10
    Dernier message: 17/10/2006, 13h41
  3. [SOLUCE] Utilisation de l'intelligence...
    Par Darien dans le forum La Taverne d'Amkethran (Baldur's Gate 2)
    Réponses: 7
    Dernier message: 02/05/2006, 23h30
  4. [DSOTSC] Le patch ne traduit pas certains textes
    Par gautwp59 dans le forum Le Festival de Nashkel : les modules BG1
    Réponses: 3
    Dernier message: 02/08/2005, 00h06
  5. Biographies luméniennes : règles d'utilisation
    Par Perdigan Foxglove dans le forum Les archives de Lumenis
    Réponses: 0
    Dernier message: 02/02/2004, 19h25

Les tags pour cette discussion

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