Affichage des résultats 1 à 12 sur 12

Discussion: Recopier en patchant un baf AVANT compilation, prolème.

  1. #1
    Date d'inscription
    décembre 2007
    Localisation
    GAP, Hautes alpes
    Messages 
    2 236

    Recopier en patchant un baf AVANT compilation, prolème.

    Je voudrais recopier 22 fois un fichier baf avant de tous les compiler (parce que 98% du fichier est fixe et destiné à évoluer avec d'autres mises à jour, il n'y a qu'une ligne qui change dans chaque script, donc je préfère partir d'un seul fichier unique)

    le baf se présente comme ceci :
    Code:
    IF
        Global("PxQuaramon","LOCALS",0)
        HasItem("HELM24",LastSummonerOf(Myself))
    THEN
      RESPONSE #100
        TakePartyItem("HELM24")
        SetGlobal("PxQuaramon","LOCALS",1)
    END
    
    IF
        Global("PxQuaramon","LOCALS",0)
        HasItem("HELM25",LastSummonerOf(Myself))
    THEN
      RESPONSE #100
        TakePartyItem("HELM25")
        SetGlobal("PxQuaramon","LOCALS",1)
    END
    
    IF
        Global("PxQuaramon","LOCALS",0)
        HasItem("HELM34",LastSummonerOf(Myself))
    THEN
      RESPONSE #100
        TakePartyItem("HELM37")
        SetGlobal("PxQuaramon","LOCALS",1)
    END
    
    IF
        Global("PxQuaramon","LOCALS",1)
    THEN
      RESPONSE #100
         SetGlobal("PxQuaramon","LOCALS",0)
         TakeItemReplace("pxl2qu5","pxl2qu6",LastSummonerOf(Myself))
         CreateVisualEffectObject("ICCSWOUI",Myself)
         DisplayString(Myself, @80382)
         DestroySelf()
    END
    Pour chaque fichier je n'ai besoin que de changer pxl2qu5 en pxl2qu"i" et pxl2qu6 en pxl2qu"i+1"


    Pour l'instant j'essaie de tous les copier dans un sous répertoire "delete" dans "Backup" avant de tous les compiler. Ca se copie et compile mais ça coince sur i+1 (j'ai essayé pleins de trucs)
    J'utilise :
    OUTER_FOR ( i=6 ; i<28 ; i +=1) BEGIN //Pour chaque script à copier nommé de 6 à 27
    COPY ~Derats_Magasin_2/Scripts/pxl2qu5.baf~ ~Derats_Magasin_2/Backup/Delete/pxl2qu%i%.baf~ REPLACE_TEXTUALLY ~pxl2qu6~ ~pxl2qu%1+i%~ REPLACE_TEXTUALLY ~pxl2qu5~ ~pxl2qu%i%~
    END
    COMPILE ~Derats_Magasin_2/Backup/Delete~
    Ca me fait bien 22 fichier et 22 scripts compilés, mais ça donne ça : (exemple pris dans le script pxl2qu9)
    TakeItemReplace("pxl2qu9","pxl2qu%1+i%",LastSummonerOf(Myself)
    Comment obtenir ce i+1 ? (pxl2qu%1+i% devrait être pxl2qu10)

    De plus, existe t'il une solution moins lourde pour compiler en patchant sans construire un répertoire complet ?
    23/20/2021 - Oubliez mes modules perdus dans les sous-sous sols des caves de ce forum. Oubliez mon travail. Oubliez moi. BG2 et sa communauté, c'est terminé pour moi.

  2. #2
    Date d'inscription
    janvier 2012
    Messages 
    113
    Hello,

    weidu, avec ses % % s'attend à une variable non à un calcul, comme la variable '1+i' n'existe pas il la considère comme une chaîne de caractère.
    Il y a peut-être moins lourdingue mais tu peux effectuer le calcul en amont avec par exemple :
    Code:
    OUTER_FOR ( i=6 ; i<28 ; i +=1) BEGIN //Pour chaque script à copier nommé de 6 à 27
    OUTER_SET j = i+1
    COPY ~Derats_Magasin_2/Scripts/pxl2qu5.baf~ ~Derats_Magasin_2/Backup/Delete/pxl2qu%i%.baf~ REPLACE_TEXTUALLY ~pxl2qu6~ ~pxl2qu%j%~ REPLACE_TEXTUALLY ~pxl2qu5~ ~pxl2qu%i%~ 
    END
    COMPILE ~Derats_Magasin_2/Backup/Delete~

    Tu peux également patcher et compiler en même temps mais le problème étant que tu as besoin de copier tes fichiers afin de les renommer. Donc ça ne t'apportera rien.
    Mais, au lieu de faire 22 bam avec une partie changeante, peut-être est-il possible de faire un seul fichier bam avec 22 parties changeantes ? Dans ce cas, ça sera plus aisé.

    As-tu remarqué le HasItem("HELM34") suivi de TakePartyItem("HELM37") ?

  3. #3
    Date d'inscription
    décembre 2007
    Localisation
    GAP, Hautes alpes
    Messages 
    2 236
    Merci, ça marche.
    Finalement c’était aussi simple que OUTER_SET que je ne connaissais pas. Quand je dis que mon niveau est infiniment basique.....

    En fait le script est déjà pas mal long, au début il y a un bloc pour chaque pierre ionique trouvable (21 au total) avant le bloc final qui supprime la chandelle invoquant le montre lvl X pour la remplacer par la chandelle invoquant le monstre x+1.
    Je pourrais faire faire ça sur un seul script et gerer toutes les chandelles (22 au total) sur un seul script. Mais alors ça ferait 43 blocs, qui ne devraient plus être Local mais Global. Et puis je en vois pas comment. J'ai fait en sorte de n'avoir la valeur que 0 ou 1 pour assurer qu'une seule pierre soit supprimée à chaque fois.

    Et merci pour la denier remarque, effectivement il y avait un 34 devenu 37
    23/20/2021 - Oubliez mes modules perdus dans les sous-sous sols des caves de ce forum. Oubliez mon travail. Oubliez moi. BG2 et sa communauté, c'est terminé pour moi.

  4. #4
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 396
    J'arrive à la bourre, mais il existe une autre solution : utiliser les fichiers temporaires inlined.

    Code:
    OUTER_FOR (i = 5 ; i <28 ; ++i) BEGIN
    
        OUTER_SET j = i+1
        OUTER_SPRINT var1 EVAL "pxl2qu%i%"
        OUTER_SPRINT var2 EVAL "pxl2qu%j%"
    
        <<<<<<<< .../%MOD_FOLDER%/inlined/pxl2qu%i%.baf
    ... // toutes les lignes de codes précédant le passage à modifier
    
    IF
        Global("PxQuaramon","LOCALS",1)
    THEN
      RESPONSE #100
         SetGlobal("PxQuaramon","LOCALS",0)
         TakeItemReplace("%var1%","%var2%",LastSummonerOf(Myself))
         CreateVisualEffectObject("ICCSWOUI",Myself)
         DisplayString(Myself, @80382)
         DestroySelf()
    END
    >>>>>>>>
    
        COMPILE EVALUATE_BUFFER ~.../%MOD_FOLDER%/inlined/pxl2qu%i%.baf~ USING ~%MOD_FOLDER%/lang/%s/fichier_tra_if_needed_pour_@80382.tra~
    
    END
    Je n'ai pas testé ce code précis, mais j'en ai utilisé des similaires avec succès.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  5. #5
    Date d'inscription
    décembre 2007
    Localisation
    GAP, Hautes alpes
    Messages 
    2 236
    Niquel. C'est exactement ce dont j'avais besoin. Merci Freddy, encore au top sur les codes weidu.

    Bon, la chandelle du monstre est finie, il reste à faire la cassette de Faïs. Ça c'est une autre histoire....

    Edit : enfin, presque. Pour une raison qui m'échappe totalement, il veut bien afficher un DisplayString, mais il refuse d'afficher un DisplayStrinHead, quoi que je fasse.
    Dernière modification par deratiseur ; 09/02/2021 à 10h46.
    23/20/2021 - Oubliez mes modules perdus dans les sous-sous sols des caves de ce forum. Oubliez mon travail. Oubliez moi. BG2 et sa communauté, c'est terminé pour moi.

  6. #6
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 396
    D'après ton code, ce script affiche un message sur une créature convoquée. J'ai souvenir de très vieux échanges sur les forums anglo-saxons mentionnant un comportement très étrange du moteur IE avec la combinaison DisplayStringHead + DestroySelf. En gros, les intervenants ne comprenaient pas pourquoi le DisplayStringHead ne s'affichait pas dans certains cas, et ceci de manière aléatoire. Du coup, j'ai pris l'habitude de scinder mon code en deux blocs: le premier affiche le message, le second détruit la créature.

    D'un autre côté, selon le message affiché, tu pourrais modifier le contenu du message pour qu'il apparaisse sur le convocateur, le possesseur de l'objet qui est modifié, en utilisant DisplayString(LastSummonerOf(Myself), @80382).

    Ceci dit, je ne sais pas si le problème a été résolu ou pas dans les versions EE.
    Dernière modification par Freddy_Gwendo ; 09/02/2021 à 16h46.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  7. #7
    Date d'inscription
    décembre 2007
    Localisation
    GAP, Hautes alpes
    Messages 
    2 236
    Ok, ça marche en mettant le code (21 fois) dans les 21 blocs checkant les objets.
    Le texte est : "Wahahahaha - Miam !", c'est bien la créature qui doit le dire
    23/20/2021 - Oubliez mes modules perdus dans les sous-sous sols des caves de ce forum. Oubliez mon travail. Oubliez moi. BG2 et sa communauté, c'est terminé pour moi.

  8. #8
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 396
    Parfait.

    Quant à WeiDU, on en apprend tous les jours dès qu'on se pose la question suivante : "N'y aurait-il pas un moyen plus simple de faire ?"
    Je suis en train de l'apprendre à mes dépens après avoir trouvé stupide d'avoir pondu deux procédures d'installation différentes pour ToB et les jeux EE. En utilisant des fonctions maisons et des ARRAYS, on résoud le problème facilement, même si c'est pénible à coder...

    Les fichiers temporaires sont très rarement utilisés et pourtant, ils permettrait d'alléger de nombreux mods de lignes redondantes inutiles qui alourdissent le code.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  9. #9
    Date d'inscription
    mars 2010
    Localisation
    Paris
    Messages 
    1 247
    Sujet très intéressant qui me sera utile. :-p

    Je me permets d'ajouter une question sur un sujet aussi de "recopier" ou "usiner" un modèle de base:
    Sur une carte est ce possible "recopier" un trigger trap x fois et de modifier son nom et le fichier .baf qui lui est lié dans un TP2? En gros, on aurait x trigger trap au même endroit et même dimension.

    Le code de la carte décidera lequel est actif. ;-p

    Cocrane

  10. #10
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 396
    J'ai donné le code dans mon tuto sur les cartes secrètes pour ta maison à Baldur's Gate.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  11. #11
    Date d'inscription
    mars 2010
    Localisation
    Paris
    Messages 
    1 247
    Exact, c'est du 2016! Bonne mémoire. :-)

    J'avais utilisé la carte mais pas la mécanique du TP2, je voulais déjà voir ce que ça donnait. Ensuite j'ai traité un autre sujet et je n'ai pas utilisé la mécanique d'insertion du Trigger. Pas bien, j'ai laissé un écrasement de carte.

    Merci pour le rappel. Je suis sur un trigger Trap à cloner mais à priori de ce que je vois, ce n'est pas génant si il n'y a pas de zone Travel, le nom du script .baf fait partie de la copie. Je vais voir pour mettre à jour le nom du script (%i% d'une boucle) pour mettre le bon nom en fonction du trigger trap en cours.

    Merci Freddy.

    Cocrane

    Je viens de faire un essai sur BGEE et WEIDU plante et disparait. Dans le fichier debug, je vois cette erreur:
    Code:
    [LABY.TP2] PARSE ERROR at line 14 column 1-3
    Near Text: LPF
    	GLR parse error

    Code lancé:
    Code:
    BACKUP ~Laby/backup~
    AUTHOR ~"https://www.baldursgateworld.fr/lacouronne/le-champion-de-bhaal/"~
    VERSION ~BGT v1.1 - 2019~
    
    LANGUAGE ~Francais~
    	 ~french~
    	 ~Laby/LANG/FRENCH/Setup.tra~
    
    BEGIN ~Laby~
    
    INCLUDE ~Laby/lib/GW_Cartes.tph~				// Chargement des fonctions
    
    
    LPF ~GW_CLONE_TRAVEL_TRIGGER~ STR_VAR GW_Dest_old = BG3200 GW_Dest_new = BG3201 GW_Name_new = COTSP2 RET GW_add_trigger END
    PATCH_IF ("%GW_add_trigger%" STRING_COMPARE_CASE "") THEN BEGIN
    	LPF ~GW_REINCLUDE~ STR_VAR GW_input = EVAL "%GW_add_trigger%" END
    END

    L'objectif est le suivant:
    - cloner un trigger trap x fois sur la carte d'origine et changer le nom du trigger et le fichier .baf lié.
    exemple:
    Trigger Trap COTSP2 / COTSP2(.baf)
    Trigger Trap COTSP3 / COTSP3(.baf) clone
    Trigger Trap COTSP%i% / COTSP%i%(.baf) clone
    etc...
    Pour faire simple, éviter de faire x triggers quasi identiques à la main

    J'ai pris la carte BG3200 comme source pour faire un test et j'ai créé le trigger COTSP2. J'ai tenté de prendre la carte cible BG3200 ou BG3201.

    J'ai essayé ce code-ci à partir de ton code:
    Code:
    INCLUDE ~Laby/lib/GW_Cartes.tph~				// Chargement des fonctions
    
    COPY_EXISTING	~BG3200.are~ ~override~
    	PATCH_IF (SOURCE_SIZE > 0x11b) THEN BEGIN	// Taille minimum d'un fichier .ARE = Vérification de la validité du fichier .ARE
    		LPF ~GW_CLONE_TRAVEL_TRIGGER~ STR_VAR GW_Dest_old = BG3200 GW_Dest_new = BG3201 GW_Name_new = COTSP2 RET GW_add_trigger END
    		PATCH_IF ("%GW_add_trigger%" STRING_COMPARE_CASE "") THEN BEGIN
    			LPF ~GW_REINCLUDE~ STR_VAR GW_input = EVAL "%GW_add_trigger%" END
    		END
    	END	// of PATCH_IF (SOURCE_SIZE > 0x11b)
    BUT_ONLY
    Weidu ne plante pas mais il reste bloqué avec un message "copie et patch"

    Cocrane
    Dernière modification par Cocrane ; 14/02/2021 à 20h37.

  12. #12
    Date d'inscription
    mars 2010
    Localisation
    Paris
    Messages 
    1 247
    Freddy,
    un niveau planning, pas de soucis. J'ai x sujets à traiter. :-)

    J'ai testé la copie du Travel région sans succès. J'ai repris le code de l'époque.

    Code:
    INCLUDE ~
    Laby/lib/GW_Cartes.tph~	// Chargement des fonctions
    
    
    COPY_EXISTING	~BG3300.are~ ~override~
    	PATCH_IF (SOURCE_SIZE > 0x11b) THEN BEGIN	// Taille minimum d'un fichier .ARE = Vérification de la validité du fichier .ARE	
    		LPF ~GW_CLONE_TRAVEL_TRIGGER~ STR_VAR GW_Dest_old = BG3300 GW_Dest_new = BG9999 GW_Name_new = TRPN RET GW_add_trigger END
    		PATCH_IF ("%GW_add_trigger%" STRING_COMPARE_CASE "") THEN BEGIN
    			LPF ~GW_REINCLUDE~ STR_VAR GW_input = EVAL "%GW_add_trigger%" END
    		END
    	END
    BUT_ONLY
    GW_Dest_old = BG3300 Carte contenant le travel région
    GW_Dest_new = BG9999 Carte à créer avec le travel région copié
    GW_Name_new = TRPN Nom du travel région à copier.

    Résultat:
    Code:
    Installing [Laby] [BGT v1.1 - 2019]
    Copying and patching 1 file ...
    [./override/BG3300.are] loaded, 49740 bytes
    Et il ne se passe plus rien.

    J'ai testé avec une carte existante et BG3300. J'ai le même résultat.

    A partir de cette fonction, je ne vois comment c'est possible d'avoir un nouveau de Travel région et un changement de nom de carte de destination.

    Cocrane

Discussions similaires

  1. [IWD2][AVIS] Compilation portraits
    Par Kro dans le forum Le Monastère du Corbeau Noir (Icewind Dale 2)
    Réponses: 2
    Dernier message: 22/05/2016, 20h08
  2. [BG1][TECH] Problème d'installation de la compilation ATARI
    Par Yaumig dans le forum La Taverne de Château-Suif (Baldur's Gate 1)
    Réponses: 29
    Dernier message: 12/06/2014, 13h44
  3. La compilation Baldur's Gate à 9,99 €
    Par QDI dans le forum Le Comptoir d'Amn
    Réponses: 8
    Dernier message: 24/02/2008, 13h10
  4. [WeiDU] Problèmes de décompilation et de compilation de dialogues
    Par Manchot Empereur multiclassé dans le forum Programmation WeiDU
    Réponses: 8
    Dernier message: 16/05/2006, 17h18
  5. [WeiDU] Erreurs pendant la compilation d'un dialogue
    Par BODHI dans le forum Dialogues
    Réponses: 12
    Dernier message: 03/02/2005, 18h21

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