Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

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

Répondre
Sous Nain
Statut : Hors ligne

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

.

Message par Sous Nain »

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 ! :p :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
Mathrim Cauthon
Statut : Hors ligne
.

Message par Mathrim Cauthon »

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.
Sous Nain
Statut : Hors ligne
.

Message par Sous Nain »

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 : Tout sélectionner

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

Code : Tout sélectionner

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 : Tout sélectionner

APPEND ~scrpdesc.2DA~             ~SA-CONT 999011 999012~

COPY_EXISTING ~scrpdesc.2da~ ~override/scrpdesc.2da~
  REPLACE ~999011~ @200
  REPLACE ~999012~ @201
Une idée ? ^^
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

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 : Tout sélectionner

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, ...).
:!: 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 !
Sous Nain
Statut : Hors ligne
.

Message par Sous Nain »

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

Il ne reste plus qu'à m'y remettre ^^
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

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 : Tout sélectionner

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.
[/b]
Comme indiqué, tu peux choisir entre DisplayString() et DisplayStringHead() selon l'endroit où tu souhaites que le texte s'affiche.
:!: 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 !
Sous Nain
Statut : Hors ligne
.

Message par Sous Nain »

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...
Avatar du membre
Walar
Blême
Messages : 979
Enregistré le : jeu. 24 avr. 2003, 20:39
Contact :
Statut : Hors ligne
.

Message par Walar »

Voilà un exemple pour les scripts, je fais comme ça et ça fonctionne :

Dans le fichier .tp2 :

Code : Tout sélectionner

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

Code : Tout sélectionner

IF
  Allegiance(Myself,ENEMY)
  !Detect(NearestEnemyOf(Myself))
  !Detect(Player1)
  !Range(Player1,20)
THEN
  RESPONSE #100
    ForceSpell(Player1,WIZARD_DIMENSION_DOOR)
    [color=red]DisplayStringHead(Myself,777779)[/color]
END
Sous Nain
Statut : Hors ligne
.

Message par Sous Nain »

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.
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

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 : Tout sélectionner

IF
  Allegiance(Myself,ENEMY)
  !Detect(NearestEnemyOf(Myself))
  !Detect(Player1)
  !Range(Player1,20)
THEN
  RESPONSE #100
    ForceSpell(Player1,WIZARD_DIMENSION_DOOR)
    [color=yellow]DisplayStringHead(Myself,@115)[/color]
END
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
Faust
Adepte de Grondemarteau
Loup noir
Messages : 291
Enregistré le : mer. 15 avr. 2009, 12:04
Localisation : Wherever I may roam
Statut : Hors ligne
.

Message par Faust »

Freddy_Gwendo a écrit :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 : Tout sélectionner

IF
  Allegiance(Myself,ENEMY)
  !Detect(NearestEnemyOf(Myself))
  !Detect(Player1)
  !Range(Player1,20)
THEN
  RESPONSE #100
    ForceSpell(Player1,WIZARD_DIMENSION_DOOR)
    [color=yellow]DisplayStringHead(Myself,@115)[/color]
END
Hello Freddy,

NearInfinity n'apprécie pas quand j'essaye de le faire, me marque ce message dans erreur:

5: Lexical error at line 5, column 42. Encountered "@" (64), after :""

Si j'insiste en sauvegardant il m'efface tout le contenu du fichier BCS.

Est ce que le fichier tra doit être fait comme pour un dialogue ? De souvenir pour un dialogue il faut lier le tra au bcs dans weidu.


Voici mon Script:

IF
Global("SQUIRREL","GLOBAL",1)
THEN
RESPONSE #100
DisplayStringHead(Myself,@20000) // No such index
ForceSpell("NIEMAIN",FIREDRAKE_DAMAGE) // Niemain
END

IF
Global("SQUIRREL","GLOBAL",1)
Dead("NIEMAIN") // Niemain
THEN
RESPONSE #100
SetGlobal("SQUIRREL","GLOBAL",2)
END


Et dans mon fichier de traduction principal:

@200000=~J'aime pas les rats~
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

1. Si ce n'est pas une faute de frappe : tu as écrit la référence @20000 dans le script, et @200000 dans le tra. Si @200000 n'existe pas, WeiDU bloque.

2. Sinon, mais j'en doute, puisque tu parles de ton fichier .TRA principal, c'est que tu ne l'as pas déclaré.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
Faust
Adepte de Grondemarteau
Loup noir
Messages : 291
Enregistré le : mer. 15 avr. 2009, 12:04
Localisation : Wherever I may roam
Statut : Hors ligne
.

Message par Faust »

Freddy_Gwendo a écrit :1. Si ce n'est pas une faute de frappe : tu as écrit la référence @20000 dans le script, et @200000 dans le tra. Si @200000 n'existe pas, WeiDU bloque.

2. Sinon, mais j'en doute, puisque tu parles de ton fichier .TRA principal, c'est que tu ne l'as pas déclaré.
Je suis navré Freddy, actuellement je crée le fichier BCS avec NearInfinity, et donc ajoute le contenu via celui-ci. NearInfinity supprime tout le contenu du BCS à cause de l'erreur mentionnée précédemment (il n'arrive pas à digérer le symbole "@") le fait que la string 200000 n'existe pas ne bloque pas NearInfinity si je ne rajoute pas le "@".

Je ne peux pas arriver à l'étape de Weidu car le fichier BCS se retrouve vierge après compilation du BCS via NearInfinity.

Edit: J'ai fait autrement, au lieu de me servir du fichier bcs, j'ai créé un fichier BAF avec un editeur de texte avec le @, et ai compilé avec COMPILE ~MonMod\MonScript.BAF~

Ca fonctionne!
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
Avatar du membre
Faust
Adepte de Grondemarteau
Loup noir
Messages : 291
Enregistré le : mer. 15 avr. 2009, 12:04
Localisation : Wherever I may roam
Statut : Hors ligne
.

Message par Faust »

Freddy_Gwendo a écrit :1. Si ce n'est pas une faute de frappe : tu as écrit la référence @20000 dans le script, et @200000 dans le tra. Si @200000 n'existe pas, WeiDU bloque.

2. Sinon, mais j'en doute, puisque tu parles de ton fichier .TRA principal, c'est que tu ne l'as pas déclaré.
Le problème semble persister malgré une frappe concordante, le @ bloque la création du fichier, si je le retire Weidu créé bien le fichier mais du coup plus aucune ligne de dialogue dans le jeu.
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

Question : dans quel fichier tra se trouve ton strref? L'as-tu déclaré dans la procédure LANGUAGE ?
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
Faust
Adepte de Grondemarteau
Loup noir
Messages : 291
Enregistré le : mer. 15 avr. 2009, 12:04
Localisation : Wherever I may roam
Statut : Hors ligne
.

Message par Faust »

Freddy_Gwendo a écrit :Question : dans quel fichier tra se trouve ton strref? L'as-tu déclaré dans la procédure LANGUAGE ?
Dans le fichier tra principal de mon module, utilisé pour bon nombre de mes mots rajoutés qui fonctionnent sans problème. Le problème semble vraiment être avec l'utilisation de @

5: Lexical error at line 5, column 42. Encountered "@" (64), after :""

Si j'insiste en sauvegardant il m'efface tout le contenu du fichier BCS.

EDIT:

Lol ne te moque pas, en fait les fichiers ne se créaient pas car je les assignais à un fichier .CRE avant de les compiler..... après avoir changé l'ordre, le fichier se créé bien et le "@xxx" est remplacé par la un numéro extrait du .TLK :$

Avant:


COPY ~El[r]in_Dragosh/Creatures/El[r]inC.cre~ ~override/El[r]inC.cre~ //
SAY NAME1 ~Enfant elfe~
SAY NAME2 ~Enfant elfe~
WRITE_SHORT 0x244 0 // ne change pas
WRITE_BYTE 0x247 0x40 // ne change pas
WRITE_ASCII SCRIPT_OVERRIDE ~El[r]inC~ #8
WRITE_ASCII DIALOG ~El[r]inC~ #8 // Write the new dialog file
WRITE_ASCII DEATHVAR ~El[r]inC~ #8 // Write the new deathvariable
BUT_ONLY_IF_IT_CHANGES


COPY ~El[r]in_Dragosh/Creatures/El[W]LF2.cre~ ~override/El[W]LF2.cre~ //
SAY NAME1 ~Loup-garou~
SAY NAME2 ~Loup-garou~
WRITE_SHORT 0x244 0 // ne change pas
WRITE_BYTE 0x247 0x40 // ne change pas
WRITE_ASCII SCRIPT_OVERRIDE ~El[W]LF2~ #8
WRITE_ASCII DIALOG ~El[W]LF2~ #8 // Write the new dialog file
WRITE_ASCII DEATHVAR ~El[W]LF2~ #8 // Write the new deathvariable
BUT_ONLY_IF_IT_CHANGES


COPY ~El[r]in_Dragosh/Creatures/El[W]LF3.cre~ ~override/El[W]LF3.cre~ //
SAY NAME1 ~Loup-garou~
SAY NAME2 ~Loup-garou~
WRITE_SHORT 0x244 0 // ne change pas
WRITE_BYTE 0x247 0x40 // ne change pas
WRITE_ASCII SCRIPT_OVERRIDE ~El[W]LF3~ #8
WRITE_ASCII DIALOG ~El[W]LF3~ #8 // Write the new dialog file
WRITE_ASCII DEATHVAR ~El[W]LF3~ #8 // Write the new deathvariable
BUT_ONLY_IF_IT_CHANGES


COPY ~El[r]in_Dragosh/Creatures/El[W]LF4.cre~ ~override/El[W]LF4.cre~ //
SAY NAME1 ~Loup-garou~
SAY NAME2 ~Loup-garou~
WRITE_SHORT 0x244 0 // ne change pas
WRITE_BYTE 0x247 0x40 // ne change pas
WRITE_ASCII SCRIPT_OVERRIDE ~El[W]LF4~ #8
WRITE_ASCII DIALOG ~El[W]LF4~ #8 // Write the new dialog file
WRITE_ASCII DEATHVAR ~El[W]LF4~ #8 // Write the new deathvariable
BUT_ONLY_IF_IT_CHANGES

// SCRIPTS COMPILE


COPY ~El[r]in_Dragosh/Scripts/C[O]CRAN.BCS~ ~override~


COMPILE ~El[r]in_Dragosh/Scripts/El[r]inC.baf~


COMPILE ~El[r]in_Dragosh/Scripts/El[w]lf2.baf~

COMPILE ~El[r]in_Dragosh/Scripts/El[w]lf3.baf~


COMPILE ~El[r]in_Dragosh/Scripts/El[w]lf4.baf~


COMPILE ~El[r]in_Dragosh/Scripts/EL[H]ROD.baf~
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
Bataff
Zombi
Messages : 47
Enregistré le : ven. 25 oct. 2019, 14:53
Localisation : vers Lyon
Statut : Hors ligne
.

Message par Bataff »

Salut Faust,

A priori, il y a une erreur de syntaxe. Serait-il possible de nous donner le contenu de la ligne 5 (dans le fichier .baf si je comprends bien) pour que l'on y voit plus clair ?

Bon courage et bonne journée.

Note : Je ne sais pas ce que tu as fait mais, au cas-où, ne touche pas au fichier .bcs, édite uniquement le .baf (il sera compilé après en .bcs dans /Override avec l'instruction COMPILE dans le tp2)
Sinon, pour assigner un fichier contenant des strref @... avec le bon .tra, on peut faire par exemple comme ça (dans le .tp2) :
COMPILE ~MonMod\MonScript.BAF~ USING ~[chemin vers le tra]/[fichier.tra]~

Sans oublier la procédure LANGAGE avant le BEGIN du .tp2, comme le conseille Freddy (mais comme ma façon de faire dans mon .tp2 a été un peu bancale et que je ne me rappelle plus comment il faut le faire correctement, je ne vais pas donner mon exemple, sans doute est-ce expliqué dans un tutorial ou dans la doc de WeiDU si besoin est)

EDIT : Oups, je n'avais pas vu ton EDIT avant de poster... Ok, merci (je verrais ce soir pour ma part à moins que Freddy ne te réponde avant)
Bataff
Zombi
Messages : 47
Enregistré le : ven. 25 oct. 2019, 14:53
Localisation : vers Lyon
Statut : Hors ligne
.

Message par Bataff »

(re - et désolé, je n'avais eu le temps que d'entre-apercevoir ton Edit puis éditer le mien avant de devoir partir ce matin)

Pour la confusion avec les .cre : Boh, le genre de chose qui arrive. C'est vrai que des fois on est tellement fixé dans une direction que l'on peut oublier carrément ce qui est sous nos yeux. C'est comme vérifier si on n'a fait aucune faute dans un texte que l'on a rédigé, nos propres yeux ne voient pas forcément ces fautes alors qu'il y a beaucoup plus de chances lorsque ce sont ceux d'une autre personne.

Pour en revenir au sujet : Je ne vois pas comment tu assignes les strref mais ce n'était finalement pas le problème auquel je pensais. Et si je comprends bien, tout va bien maintenant. Bon, ben très bien :ok:

A plus,
Bataff
Répondre

Retourner vers « Scripts »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités