Page 1 sur 1

[WEIDU] Ajouter un fichier script à une AREA n'ayant pas de fichier BCS

Posté : lun. 31 juil. 2017, 09:49
par Faust
Bonjour,

Je souhaiterai appliquer un fichier script à une AREA n'ayant pas de fichier .BCS.

Je pourrais simplement modifier le fichier AREA et l'appliquer au jeu, mais pour prévenir d'un problème de compatibilité avec d'autres mods qui modifieraient l'AREA j'aurais aimé savoir s'il existait une commande weidu permettant de lier un fichier BCS à une AREA? Je connais déjà la commande permettant d'étendre un script, mais je ne sais pas s'il est possible d'en lier un.

L'AREA concernée est AR1203. Je tourne sous BG2 Vanilla.

Posté : sam. 05 août 2017, 02:12
par Freddy_Gwendo
Ouaip !

Je n'ai pas testé (écrit au vol), mais ceci devrait fonctionner :

Code : Tout sélectionner

COPY_EXISTING ~AR1203.are~ ~override~

    READ_ASCII 0x94 old_script (8)

    PATCH_IF ("%oldscript%" STRING_EQUAL "") OR ("%old%_script"~ STRING_COMPARE_CASE "none" = 0) BEGIN	// Si la carte n'a pas de script

        WRITE_ASCII 0x94 AR1203 #8									// On assigne le script AR1203 à la carte

        INNER_ACTION BEGIN

             COMPILE ~%MOD_FOLDER%/Tonrépertoire/tonscript.baf~ ~override/AR1203.bcs~			// On compile ton script sous le nom AR1203

        END

    END ELSE BEGIN											// Si la carte possède un script

        INNER_ACTION BEGIN

             EXTEND_TOP ou EXTEND_BOTTOM ~%old_script%.bcs~ ~%MOD_FOLDER%/Tonrépertoire/tonscript.baf~	// On ajoute ton bout de script à l'existant

        END

    END

BUT_ONLY

Posté : dim. 30 mai 2021, 11:48
par Faust
Freddy_Gwendo a écrit :Ouaip !

Je n'ai pas testé (écrit au vol), mais ceci devrait fonctionner :

Code : Tout sélectionner

COPY_EXISTING ~AR1203.are~ ~override~
    READ_ASCII 0x94 old_script (8)
    PATCH_IF ("%oldscript%" STRING_EQUAL "") OR ("%old%_script"~ STRING_COMPARE_CASE "none" = 0) BEGIN    // Si la carte n'a pas de script
        WRITE_ASCII 0x94 AR1203 #8                                    
// On assigne le script AR1203 à la carte
        INNER_ACTION BEGIN
             COMPILE ~%MOD_FOLDER%/Tonrépertoire/tonscript.baf~ ~override/AR1203.bcs~          
  // On compile ton script sous le nom AR1203
        END
    END ELSE BEGIN                                           
 // Si la carte possède un script
        INNER_ACTION BEGIN
             EXTEND_TOP ou EXTEND_BOTTOM ~%old_script%.bcs~ ~%MOD_FOLDER%/Tonrépertoire/tonscript.baf~   
 // On ajoute ton bout de script à l'existant
        END
    END
BUT_ONLY
Hello Freddy,

après quelques ajustement, et installation avec ce code, il semblerait que le script ne se rattache pas au fichier AR1203.are. Aucune idée si le blocage se fait à la lecture de l'ancien script ou au moment de patcher le fichier, le "%old%_script%"~ me faisait un message d'erreur à cause du "~"

COPY_EXISTING ~AR1203.are~ ~override~
READ_ASCII 0x0094 old_script (8)
PATCH_IF ("%oldscript%" STRING_EQUAL "") OR ("%old%_script%" STRING_COMPARE_CASE "None" = 0) BEGIN
// Si la carte n'a pas de script
WRITE_ASCII 0x0094 ~AR1203~
// On assigne le script AR1203 à la carte
INNER_ACTION BEGIN
COMPILE ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~ ~override/AR1203.bcs~
// On compile ton script sous le nom AR1203
END
END ELSE BEGIN
// Si la carte possède un script
INNER_ACTION BEGIN
EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
// On ajoute ton bout de script à l'existant
END
END
BUT_ONLY
Le fichier joint ar1203.jpg n’est plus disponible.
Cela dit l'expression suivante fonctionne bien:

EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~
COPY_EXISTING ~AR1203.are~ ~override~
WRITE_ASCII 0x0094 ~AR1203~
BUT_ONLY

Simplement pour des raisons de compatibilité je ne voudrais pas écraser le fichier ou altérer de manière inadéquate ces deux fichiers

EDIT 1: Il semblerait qu'en modifiant de cette manière cela fonctionne:

COPY_EXISTING ~AR1203.are~ ~override~
READ_ASCII 0x0094 old_script (8)
PATCH_IF ("%oldscript%" STRING_EQUAL "") OR ("%old%_script%" STRING_COMPARE_CASE "none" = 0) BEGIN // Si la carte n'a pas de script
WRITE_ASCII 0x0094 ~AR1203~ // On assigne le script AR1203 à la carte
INNER_ACTION BEGIN
COMPILE ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~ ~override/AR1203.bcs~ // On compile ton script sous le nom AR1203


END
END ELSE BEGIN // Si la carte possède un script
WRITE_ASCII 0x0094 ~AR1203~
INNER_ACTION BEGIN


EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~ // On ajoute ton bout de script à l'existant



END


END


BUT_ONLY

Mais on revient au problème de modifier le script attaché à la carte s'il elle en possédait déjà un, comme si dans la première partie de l'expression le nom du script n'était pas vérifié.

EDIT 2 : Cela semble fonctionner en modifiant les éléments suivants


COPY_EXISTING ~AR1203.are~ ~override~
READ_ASCII 0x0094 old_script (8)
PATCH_IF ("%oldscript%" STRING_EQUAL "") OR ("%old%_script%" STRING_COMPARE_CASE "none" = 0) BEGIN // Si la carte n'a pas de script
WRITE_ASCII 0x0094 ~AR1203~ // On assigne le script AR1203 à la carte
INNER_ACTION BEGIN
COMPILE ~El[r]in_Dragosh/Scripts/AR1203.BAF~ ~override/AR1203.bcs~ // On compile ton script sous le nom AR1203


END
END ELSE BEGIN // Si la carte possède un script
WRITE_ASCII 0x0094 ~AR1203~
INNER_ACTION BEGIN


EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~ // On ajoute ton bout de script à l'existant



END


END


BUT_ONLY

Ce qui est étrange c'est que Weidu transformait bien mon fichier [EL]1203.BAF en AR1203.bcs dans le dossier override mais ne le fait plus après cette modification.

EDIT 3: J'ai remplacé la ligne suivante




COPY_EXISTING ~AR1203.are~ ~override~
READ_ASCII 0x0094 old_script (8)
PATCH_IF ("%oldscript%" STRING_EQUAL "") OR ("%old%_script%" STRING_COMPARE_CASE "none" = 0) BEGIN // Si la carte n'a pas de script
WRITE_ASCII 0x0094 ~AR1203~ // On assigne le script AR1203 à la carte
INNER_ACTION BEGIN
COMPILE ~El[r]in_Dragosh/Scripts/AR1203.BAF~ ~override/AR1203.bcs~ // On compile ton script sous le nom AR1203
EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~ // On ajoute ton bout de script à l'existant/ créé le fichier s'il n'existe pas


END
END ELSE BEGIN // Si la carte possède un script
INNER_ACTION BEGIN
EXTEND_BOTTOM ~AR1203.bcs~ ~El[r]in_Dragosh/Scripts/[EL]1203.BAF~ // On ajoute ton bout de script à l'existant/ créé le fichier s'il n'existe pas



END


END


BUT_ONLY