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] modification/ copy/ création d'un fichier BCS sous Weidu

Répondre
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

[Script] modification/ copy/ création d'un fichier BCS sous Weidu

.

Message 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.
[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 »

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.
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 :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?
Fichiers joints
weidu.jpg
[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 »

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~
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 »

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. ;)
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 »

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 ^^
[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 »

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.
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 :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.
[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 »

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
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 »

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.
[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 »

&quot 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.
Répondre

Retourner vers « Scripts »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité