Page 1 sur 1
[Script] modification/ copy/ création d'un fichier BCS sous Weidu
Posté : lun. 17 mai 2021, 16:51
par Faust
Hello,
J'ai un script Weidu permettant de modifier ou copier un fichier à partir d'un dossier, mais j'aimerai dans la même expression permettre la création du fichier si celui-ci n'existe ni dans le chitin.key ni dans un dossier de l'installation du mod, voici ce que j'ai:
ACTION_IF FILE_EXISTS ~override/AR1203.BCS~ THEN BEGIN
EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
END ELSE BEGIN
COPY_EXISTING ~AR1203.bcs~ ~override~
WRITE_ASCII 0x0094 ~AR1203~
INNER_ACTION BEGIN
COMPILE ~El[r]in_Dragosh/Scripts/[EL]1203.baf~ ~override/AR1203.bcs~
END
BUT_ONLY_IF_IT_CHANGES
END
J'ai vu qu'il existait une commande CREATE, mais je ne sais pas comment l'utiliser:
CREATE type [ VERSION version ] resref [ patch list ] |
Creates a new file of the specified type with the resource reference resref and a correct file extension for the file type. If there are any patches, they are applied to contents of the new file. Any existing file with the same name will be backed up, as normal. The file will be created structurally correct but will contain no non-zero data aside from the structural details. The file version will be native to the current game, or default to "V1.0", but can be overridden with the VERSION option, which takes a string specifying the desired version. CREATE supports the file types ARE, CRE, EFF, ITM, SPL and STO and all their known file versions (aside from EFF V1.0, which is never found as a file). |
L'objectif est d'aller dans cet ordre:
Verification de la présence du fichier dans l'override, copie de celui-ci à partir du chitin.key, si n'existe pas création du fichier pour ensuite compiler le contenu du fichier baf dans celui-ci.
Merci pour votre aide.
Posté : mar. 18 mai 2021, 00:41
par Freddy_Gwendo
Faust a écrit :Hello,
J'ai un script Weidu permettant de modifier ou copier un fichier à partir d'un dossier, mais j'aimerai dans la même expression permettre la création du fichier si celui-ci n'existe ni dans le chitin.key ni dans un dossier de l'installation du mod, voici ce que j'ai:
Code : Tout sélectionner
ACTION_IF FILE_EXISTS ~override/AR1203.BCS~ THEN BEGIN
EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
END ELSE BEGIN
COPY_EXISTING ~AR1203.bcs~ ~override~
WRITE_ASCII 0x0094 ~AR1203~
INNER_ACTION BEGIN
COMPILE ~El[r]in_Dragosh/Scripts/[EL]1203.baf~ ~override/AR1203.bcs~
END
BUT_ONLY_IF_IT_CHANGES
END
Pour commencer, la commande EXTEND_BOTTOM effectue le check pour toi : elle cherche le fichier à modifier 1) dans l'override, 2) dans les resources BIF. Donc oublie ton test.
Il me semble que les dernières versions de WeiDU ont corrigé le bogue bloquant où les commandes EXTEND_TOP et EXTEND_BOTTOM ne fonctionnaient pas si le fichier à modifier n'existait pas. Je les ai utilisées lors de mises à jour récentes et il me semble qu'elle créent le fichier à modifier s'il n'existe pas.
Dans ton cas, je me contenterais de :
Code : Tout sélectionner
EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
COPY_EXISTING ~AR1203.are~ ~override~
WRITE_ASCII 0x0094 ~AR1203~
BUT_ONLY
Oublie aussi la fonction CREATE qui ne peut créer que des fichiers "textes" (SPL, ITM, etc...) et pas les fichiers BCS qui sont compilés.
Posté : mar. 18 mai 2021, 11:45
par Faust
Freddy_Gwendo a écrit :Pour commencer, la commande EXTEND_BOTTOM effectue le check pour toi : elle cherche le fichier à modifier 1) dans l'override, 2) dans les resources BIF. Donc oublie ton test.
Il me semble que les dernières versions de WeiDU ont corrigé le bogue bloquant où les commandes EXTEND_TOP et EXTEND_BOTTOM ne fonctionnaient pas si le fichier à modifier n'existait pas. Je les ai utilisées lors de mises à jour récentes et il me semble qu'elle créent le fichier à modifier s'il n'existe pas.
Dans ton cas, je me contenterais de :
Code : Tout sélectionner
EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
COPY_EXISTING ~AR1203.are~ ~override~
WRITE_ASCII 0x0094 ~AR1203~
BUT_ONLY
END
Oublie aussi la fonction CREATE qui ne peut créer que des fichiers "textes" (SPL, ITM, etc...) et pas les fichiers BCS qui sont compilés.
Merci Freddy!
En revanche même après MAJ de Weidu
Le fichier joint weidu.jpg n’est plus disponible.
En revanche l'expression suivante fonctionne:
ACTION_IF FILE_EXISTS ~override/AR1203.BCS~ THEN BEGIN
EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
COPY_EXISTING ~AR1203.are~ ~override~
WRITE_ASCII 0x0094 ~AR1203~
BUT_ONLY
END
Mais pas de création de fichier 1203.bcs
Possibilité de CREATE un .baf à compiler après dans la même expression?
Posté : mar. 18 mai 2021, 17:21
par Bataff
Bonjour Faust,
L'erreur que WeiDU retourne semble être plus une erreur de syntaxe qu'autre-chose. Normalement, ce type de ligne (*) fonctionne sans soucis.
Y avait-il un espace entre EXTEND_BOTTOM et ~AR1203.bcs~ ? AR1203 était-il encadré par deux ~ ?
Bon courage en tout cas.
(*) La première du script proposé par Freddy-Gwendo : EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
Posté : mer. 19 mai 2021, 06:14
par Freddy_Gwendo
Si tu as copié mon code, c'est de ma faute : en effectuant un copier-coller, j'avais oublié de supprimer un END. Teste-le à nouveau sans le END (corrigé dans mon message précédent).
Édit : Sinon, voici le code que j'ai employé dans
la mise à jour de Lilarcor. Il fonctionne parfaitement à condition que tu renommes ton fichier [EL]1203.BAF en ar1203.baf.
Posté : mer. 19 mai 2021, 21:15
par Faust
Bataff a écrit :Bonjour Faust,
L'erreur que WeiDU retourne semble être plus une erreur de syntaxe qu'autre-chose. Normalement, ce type de ligne (*) fonctionne sans soucis.
Y avait-il un espace entre EXTEND_BOTTOM et ~AR1203.bcs~ ? AR1203 était-il encadré par deux ~ ?
Bon courage en tout cas.
(*) La première du script proposé par Freddy-Gwendo : EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
Freddy_Gwendo a écrit :Si tu as copié mon code, c'est de ma faute : en effectuant un copier-coller, j'avais oublié de supprimer un END. Teste-le à nouveau sans le END (corrigé dans mon message précédent).
Édit : Sinon, voici le code que j'ai employé dans
la mise à jour de Lilarcor. Il fonctionne parfaitement à condition que tu renommes ton fichier [EL]1203.BAF en ar1203.baf.
Merci les gars, vous êtes d'une précieuse aide
Posté : jeu. 20 mai 2021, 00:47
par Freddy_Gwendo
Il y a un truc que j'avais loupé dans ton premier message :
Faust a écrit :Hello,
J'ai un script Weidu permettant de modifier ou copier un fichier à partir d'un dossier, mais j'aimerai dans la même expression permettre la création du fichier si celui-ci n'existe ni dans le chitin.key ni dans un dossier de l'installation du mod, voici ce que j'ai:
Code : Tout sélectionner
ACTION_IF FILE_EXISTS ~override/AR1203.BCS~ THEN BEGIN
EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
END ELSE BEGIN
==> COMPILE ~El[r]in_Dragosh/Scripts/[EL]1203.baf~ ~override/AR1203.bcs~
END
La commande COMPILE n'autorise pas les paramètres que tu as employés. Tu ne peux pas compiler le fichier A en fichier B.
Posté : sam. 22 mai 2021, 11:13
par Faust
Freddy_Gwendo a écrit :Il y a un truc que j'avais loupé dans ton premier message :
La commande COMPILE n'autorise pas les paramètres que tu as employés. Tu ne peux pas compiler le fichier A en fichier B.
Dans le même domaine, je voudrais assembler ces deux scripts pour ne pas que Weidu fasse deux fois la même chose:
EXTEND_BOTTOM ~AR8501.bcs~ ~El[r]in_Dragosh/Scripts/[EL]8501.BAF~
COPY_EXISTING ~AR8501.are~ ~override~
WRITE_ASCII 0x0094 ~AR8501~
BUT_ONLY
ACTION_IF NOT FILE_EXISTS ~override/AR8501.are~ BEGIN
COPY_EXISTING ~AR8501.are~ ~override/AR8501.are~
LAUNCH_PATCH_FUNCTION fj_are_structure INT_VAR fj_loc_x = 1160 fj_loc_y = 415 fj_orientation = 0 STR_VAR fj_structure_type ="actor" fj_name ="Crane" fj_cre_resref ="C[R]ANE" fj_dlg_resref ="C[R]ANE" END
BUT_ONLY
END ELSE BEGIN
COPY_EXISTING ~AR8501.are~ ~override/AR8501.are~
LAUNCH_PATCH_FUNCTION fj_are_structure INT_VAR fj_loc_x = 1160 fj_loc_y = 415 fj_orientation = 0 STR_VAR fj_structure_type ="actor" fj_name ="Crane" fj_cre_resref ="C[R]ANE" fj_dlg_resref ="C[R]ANE" END
BUT_ONLY
END
J'ai essayé de supprimer "ACTION_IF NOT FILE_EXISTS ~override/AR8501.are~ BEGIN
COPY_EXISTING ~AR8501.are~ ~override/AR8501.are~" mais ça se ne passe bien bien, malgré après avoir essayé de reformuler.
Posté : dim. 23 mai 2021, 01:23
par Bataff
Comme il y a la même chose après "ACTION_IF NOT FILE_EXISTS ~override/AR8501.are~ BEGIN" et après "ELSE BEGIN", les tests ainsi faits sont inutiles ("si il y a A alors faire B sinon faire B" équivaut à "faire B").
Si on simplifie, cela donnerait (en mettant aussi le WRITE_ASCII 0x0094 ~AR8501~) :
Code : Tout sélectionner
EXTEND_BOTTOM ~AR8501.bcs~ ~El[r]in_Dragosh/Scripts/[EL]8501.BAF~
COPY_EXISTING ~AR8501.are~ ~override~
WRITE_ASCII 0x0094 ~AR8501~
LPF fj_are_structure INT_VAR fj_loc_x = 1160 fj_loc_y = 415 fj_orientation = 0 STR_VAR fj_structure_type ="actor" fj_name ="Crane" fj_cre_resref ="C[R]ANE" fj_dlg_resref ="C[R]ANE" END
BUT_ONLY
(LPF = LAUNCH_PATCH_FUNCTION => Je préfère LPF qui est plus court)
(attention, je n'ai rien testé)
Dans le cas où le but serait de vérifier d'abord si AR8501.are existe in-game et qu'il faille inclure cette map si ce n'était pas le cas, je pense qu'il faudrait ce fichier et que ce dernier serait à placer quelque-part dans le mod en construction, puis faire ainsi (mais encore une fois, rien testé -et à confirmer-) :
Code : Tout sélectionner
EXTEND_BOTTOM ~AR8501.bcs~ ~El[r]in_Dragosh/Scripts/[EL]8501.BAF~
ACTION_IF FILE_EXISTS_IN_GAME ~AR8501.are~ THEN BEGIN
COPY_EXISTING ~AR8501.are~ ~override~
WRITE_ASCII 0x0094 ~AR8501~
LPF fj_are_structure INT_VAR fj_loc_x = 1160 fj_loc_y = 415 fj_orientation = 0 STR_VAR fj_structure_type ="actor" fj_name ="Crane" fj_cre_resref ="C[R]ANE" fj_dlg_resref ="C[R]ANE" END
BUT_ONLY
END ELSE BEGIN
COPY ~[I](chemin dans le mod)[/I]/AR8501.are~ ~override~
WRITE_ASCII 0x0094 ~AR8501~
LPF fj_are_structure INT_VAR fj_loc_x = 1160 fj_loc_y = 415 fj_orientation = 0 STR_VAR fj_structure_type ="actor" fj_name ="Crane" fj_cre_resref ="C[R]ANE" fj_dlg_resref ="C[R]ANE" END
BUT_ONLY
END
Posté : dim. 23 mai 2021, 13:17
par Faust
Bataff a écrit :Comme il y a la même chose après "ACTION_IF NOT FILE_EXISTS ~override/AR8501.are~ BEGIN" et après "ELSE BEGIN", les tests ainsi faits sont inutiles ("si il y a A alors faire B sinon faire B" équivaut à "faire B").
Si on simplifie, cela donnerait (en mettant aussi le WRITE_ASCII 0x0094 ~AR8501~) :
Code : Tout sélectionner
EXTEND_BOTTOM ~AR8501.bcs~ ~El[r]in_Dragosh/Scripts/[EL]8501.BAF~
COPY_EXISTING ~AR8501.are~ ~override~
WRITE_ASCII 0x0094 ~AR8501~
LPF fj_are_structure INT_VAR fj_loc_x = 1160 fj_loc_y = 415 fj_orientation = 0 STR_VAR fj_structure_type ="actor" fj_name ="Crane" fj_cre_resref ="C[R]ANE" fj_dlg_resref ="C[R]ANE" END
BUT_ONLY
(LPF = LAUNCH_PATCH_FUNCTION => Je préfère LPF qui est plus court)
(attention, je n'ai rien testé)
Dans le cas où le but serait de vérifier d'abord si AR8501.are existe in-game et qu'il faille inclure cette map si ce n'était pas le cas, je pense qu'il faudrait ce fichier et que ce dernier serait à placer quelque-part dans le mod en construction, puis faire ainsi (mais encore une fois, rien testé -et à confirmer-) :
Code : Tout sélectionner
EXTEND_BOTTOM ~AR8501.bcs~ ~El[r]in_Dragosh/Scripts/[EL]8501.BAF~
ACTION_IF FILE_EXISTS_IN_GAME ~AR8501.are~ THEN BEGIN
COPY_EXISTING ~AR8501.are~ ~override~
WRITE_ASCII 0x0094 ~AR8501~
LPF fj_are_structure INT_VAR fj_loc_x = 1160 fj_loc_y = 415 fj_orientation = 0 STR_VAR fj_structure_type ="actor" fj_name ="Crane" fj_cre_resref ="C[R]ANE" fj_dlg_resref ="C[R]ANE" END
BUT_ONLY
END ELSE BEGIN
COPY ~[I](chemin dans le mod)[/I]/AR8501.are~ ~override~
WRITE_ASCII 0x0094 ~AR8501~
LPF fj_are_structure INT_VAR fj_loc_x = 1160 fj_loc_y = 415 fj_orientation = 0 STR_VAR fj_structure_type ="actor" fj_name ="Crane" fj_cre_resref ="C[R]ANE" fj_dlg_resref ="C[R]ANE" END
BUT_ONLY
END
Et bien écoute ça marche parfaitement, merci beaucoup! Je suis entrain de nettoyer le code de mon module pour l'alléger.
Posté : dim. 23 mai 2021, 18:58
par Bataff
" a écrit :Et bien écoute ça marche parfaitement, merci beaucoup! Je suis entrain de nettoyer le code de mon module pour l'alléger.
Ravi que cela ait marché
Sinon de mon côté, j'utilise bien des cartes et j'ai testé des créations de structures (trigger, actors, ...) via LPF avec WeiDU, mais je n'utilise pas de test comme celui du second script de mon précédent message car ce serait trop long à faire à chaque utilisation d'une carte (ou alors peut-être lorsque mon mod sera un jour fini).
Au plus simple, si c'est une carte qui est déjà dans le jeu j'utilise COPY_EXISTING et si c'est une carte que j'ai créée, et mise dans mon mod en création, j'utilise COPY.
Pour les scripts des cartes : EXTEND_BOTTOM dans les deux cas.