Page 1 sur 1

[WeiDU] Équivalent du signe "*" pour la commande COPY ?

Posté : mer. 23 sept. 2009, 17:03
par deratiseur
Je voudrais juste savoir comment exprimer en code WeiDU la commande dos "copy machintruc/*b.bam override/*c.bam"

Le but est de copier 45 icônes en b en 45 icônes en c, en une seule ligne et pas en 45 comme je le fait actuellement dans mon tp2.

J'ai essayé diverses variantes de COPY, je n'y arrive pas :-/

Re : weidu signe * pour copy

Posté : mer. 23 sept. 2009, 22:22
par Isaya
Il faut des possibilités avancées en "pattern matching" pour faire ça. Les commandes standard DOS et même Unix (sauf peut-être depuis la norme POSIX) n'ont pas ces capacités, pour autant que je sache.
D'après la documentation WeiDU (chapitre 12), il semble que les capacités soient présentes mais il n'y a aucune mention des commandes pour lesquelles ces capacités sont applicables. Donc il faudra essayer mais il y a de grandes chances.
Tu peux essayer cette forme, mais sans garantie qu'elle fonctionne dans le contexte de COPY de WeiDU :
COPY ~machintruc/\(.*\)b.bam~ ~override/\1c.bam~
Cette expression régulière fonctionne dans des fonctions de recherche/remplacement d'un éditeur de texte "évolué" tel que Notepad++, à un petit détail près car les \ avant les parenthèses ouvrante et fermante sont inutiles en cas de respect de la norme POSIX. De son côté, WeiDU suit la notation d'Emacs (voir Wikipedia) comme indiqué au chapitre 12 et a donc besoin de ces \.
WeiDU devrait accepter cette forme. Si ça ne marche pas, je ne pense pas qu'il y ait d'autre solution que les 45 lignes.

Re : weidu signe * pour copy

Posté : jeu. 24 sept. 2009, 18:11
par Akadis
Weidu sait copier les contenus des dossiers.
Tu peux donc mettre tes fichiers dans un sous dossier de ton mod et faire :
COPY ~MonMod/MonDossier~ ~override~
Je l'ai utilisé dans le mod de l'extension de la quête de Jan.

Posté : mer. 23 mars 2016, 11:28
par deratiseur
De retour 7 ans plus tard pour donner la solution que j'ai trouvé je ne sais plus quand après de multiple essais et demandes.
pour copier des fichiers finissant par C en les mêmes fichiers finissant par B, il faut tous les mettre dans un répertoire (dans l'exemple si dessous je les ai mises dans le répertoire "Spell icons"), puis copier ce répertoire avec l'instruction suivante :
ACTION_BASH_FOR ~Derats_kits/Warlord/Bams/Spell icons~ ~.+\c.bam$~ BEGIN
OUTER_INNER_PATCH_SAVE new "%BASH_FOR_RES%" BEGIN REPLACE_TEXTUALLY ~c$~ ~b~ END
COPY ~%BASH_FOR_FILESPEC%~ ~override/%new%.bam~
END

Posté : mer. 23 mars 2016, 19:37
par Haplo74
Bonjour,

Je ne suis pas vraiment calé en programmation Weidu.
Mais y'a-t-il une contre-indication à utiliser les COPY_EXISTING plutôt que COPY ?
Dans le mod Unique Artefacts, l'auteur utilisait une syntaxe proche des expressions régulières qui semble répondre au besoin.

Dans mon script de nettoyage des objets de Secret of Bone Hill, j'ai repris ce type de syntaxe:
COPY_EXISTING_REGEXP GLOB ~^BH.+\.are$~ ~override~

Ca n'est pas le type d'opération qui est recherché ?

Morceau de code:

Code : Tout sélectionner

//définition des objets à supprimer

OUTER_SPRINT ~amulets~ ~AMUL14\|AMUL15\|AMUL16\|AMUL17\|AMUL19\|AMUL20\|AMUL21\|AMUL22\|AMUL23\|AMUL25\|AMUL26\|AMUL27\|AMUL28\|CHALCY3\|IPSION\|MISC5E\|MISC73\|MISC9S\|WA2AMU~
OUTER_SPRINT ~bracers~ ~BRAC03\|BRAC04\|BRAC06\|BRAC07\|BRAC08\|BRAC09\|BRAC10\|BRAC11\|BRAC13\|BRAC14\|BRAC15\|BRAC16\|BRAC17\|BRAC18\|BRAC19\|BRAC20\|BRAC21\|BRAC22\|BRAC23\|BRAC24\|BRAC25\|BRAC26~
OUTER_SPRINT ~cloaks~ ~CLCK02\|CLCK03\|CLCK04\|CLCK05\|CLCK06\|CLCK07\|CLCK08\|CLCK20\|CLCK21\|CLCK22\|CLCK23\|CLCK24\|CLCK25\|CLCK26\|CLCK27\|CLCK28\|CLCK30\|CLCK31\|CLCK32\|COMPON16\|DWCLCK01\|MISC9W~
OUTER_SPRINT ~boots~ ~BOOT01\|BOOT02\|BOOT03\|BOOT04\|BOOT05\|BOOT07\|BOOT08\|BOOT10\|BOOT11\|BOOT12\|BOOTDRIZ\|MISC8J\|MOVE7\|TROLLBOO~
OUTER_SPRINT ~belts~ ~BELT02\|BELT03\|BELT04\|BELT05\|BELT06\|BELT07\|BELT08\|BELT09\|BELT10\|BELT11~
OUTER_SPRINT ~rings~ ~ALDETH\|FAMMY\|FIRERING\|FREERING\|IMPINVIS\|JWSUPER\|MAGE01\|MAGE05\|MISC72\|MISC88\|NOCIRC\|RING02\|RING03\|RING05\|RING07\|RING08\|RING09\|RING20\|RING21\|RING22\|RING23\|RING25\|RING26\|RING27\|RING28\|RING29\|RING30\|RING31\|RING33\|RING34\|RING35\|RING36\|RING37\|RING39\|RING40\|RING41\|RING42\|RING46\|RINGPICO\|ROSSLAND\|ROSSRING\|WA2RING~
OUTER_SPRINT ~wands~ ~WAND12\|WAND13\|WAND15\|WAND18\|WAND19~
OUTER_SPRINT ~rods~ ~RODS01\|RODS02\|RODS03\|RODS06~
OUTER_SPRINT ~armors~ ~BRUENPLA\|CHALARM\|CHAN03\|CHAN06\|CHAN07\|CHAN08\|CHAN09\|CHAN10\|CHAN11\|CHAN12\|CHAN13\|CHAN14\|CHAN15\|CHAN16\|CHAN17\|CHAN18\|CHAN19\|CHAN20\|CHAN21\|CLCK15\|CLCK16\|CLCK17\|CLCK19\|CLCK29\|CLOLTH\|DWCHAN01\|DWCHAN02\|DWPLAT01\|HGWRA02\|LEAT03\|LEAT06\|LEAT07\|LEAT08\|LEAT09\|LEAT11\|LEAT12\|LEAT13\|LEAT14\|LEAT15\|LEAT16\|LEAT17\|LEAT18\|LEAT19\|LEAT20\|LEAT21\|LEAT22\|LEAT23\|LEAT24\|PALPLAT\|PLAT05\|PLAT06\|PLAT09\|PLAT11\|PLAT12\|PLAT13\|PLAT14\|PLAT15\|PLAT16\|PLAT17\|PLAT18\|PLAT19\|PLAT20\|PLAT21\|PLAT22\|PLAT23\|SHARARM\|TAMCHAIN\|TTLEAT\|VISCLCK1\|VISCLCK2\|VISCLCK3\|VISCLCK4\|VISCLCK5\|VISPLAT2\|WA2PLAT\|WA2ROBE~
OUTER_SPRINT ~shields~ ~CHALSHLD\|DWSHLD01\|SHLD07\|SHLD19\|SHLD20\|SHLD21\|SHLD22\|SHLD23\|SHLD24\|SHLD25\|SHLD26\|SHLD27\|SHLD28\|SHLD29\|SHLD30\|SHLD31\|SHLD32\|TTSHLD01\|WA2SHIEL~
OUTER_SPRINT ~helms~ ~CHALHELM\|COMPON05\|COMPON17\|HELM02\|HELM03\|HELM04\|HELM05\|HELM06\|HELM07\|HELM14\|HELM16\|HELM17\|HELM18\|HELM19\|HELM20\|HELM21\|HELM23\|HELM24\|HELM25\|HELM26\|HELM27\|HELM28\|HELM29\|HELM30\|HELM31\|HELM32\|HELM33\|HELM34\|HELMNOAN\|PALHELM\|WA2HELM~

OUTER_SPRINT ~weapons~ ~AX1H03\|AX1H05\|AX1H06\|AX1H07\|AX1H08\|AX1H09\|AX1H10\|AX1H11\|AX1H12\|AX1H13\|AX1H14\|AX1H15\|AX1H16\|AX1H17\|BRUENAXE\|GIAFIR2\|WAAXE\|BOW07\|BOW08\|BOW09\|BOW10\|BOW11\|BOW12\|BOW13\|BOW14\|BOW15\|BOW16\|BOW17\|BOW18\|BOW19\|BOW20\|BOW21\|BOW22\|BOW23\|BOW24\|BOW25\|BOW26\|BOW99\|CATTIBOW\|GORWOM2\|NPBOW\|DWXBOW01\|XBOW03\|XBOW06\|XBOW07\|XBOW08\|XBOW09\|XBOW10\|XBOW13\|XBOW14\|XBOW15\|XBOW16\|XBOW17\|XBOW18\|DAGG03\|DAGG04\|DAGG06\|DAGG07\|DAGG08\|DAGG09\|DAGG11\|DAGG12\|DAGG13\|DAGG14\|DAGG15\|DAGG17\|DAGG18\|DAGG20\|DAGG21\|DAGG22\|DAGG23\|DAGG24\|MISC75\|NEBDAG\|RAVAG02\|SW1H13\|BLUN13\|BLUN14\|BLUN14D\|BLUN14E\|BLUN14F\|BLUN14G\|BLUN14H\|BLUN14I\|BLUN27\|BLUN30\|BLUN30C\|BLUN30D\|BLUN32\|DWBLUN01\|FLOLTH\|GORWOM4\|SENDAI\|WAFLAIL\|DWHALB01\|HALB03\|HALB04\|HALB05\|HALB06\|HALB07\|HALB08\|HALB09\|HALB10\|HALB11\|HALB12\|HALBSHA\|WA2HALB\|AEGIS\|AEGIS2\|GIAFIR\|HAMM03\|HAMM04\|HAMM05\|HAMM06\|HAMM07\|HAMM08\|HAMM09\|HAMM10\|HAMM11\|HAMM12\|BLUN10\|BLUN12\|BLUN18\|BLUN19\|BLUN20\|BLUN21\|BLUN22\|BLUN23\|BLUN24\|BLUN25\|BLUN26\|BLUN28\|BLUN29\|BLUN31\|BLUN33\|HLOLTH\|RODMACE\|BLUN09\|BLUN15\|BLUN16\|BLUN17\|BLUN34\|BLUN35\|WASTAR\|CHALCY1\|CHALCY2\|CHEVIL10\|FBLADE\|NPSW05\|NPSW06\|SBLADE\|SHAKTI1\|STDEATH\|SW1H09\|SW1H10\|SW1H25\|SW1H26\|SW1H27\|SW1H28\|SW1H29\|SW1H58\|SW1H59\|SW1H66\|SW1H74\|WAWAK\|SLNG03\|SLNG04\|SLNG05\|SLNG06\|SLNG07\|SLNG08\|SLNG09\|SLNG10\|WASLING\|DWSPER01\|SPER03\|SPER05\|SPER06\|SPER07\|SPER08\|SPER09\|SPER10\|SPER11\|SPER12\|WASPEAR\|AURSTAF\|ENSTAFF\|MISC5T\|NPSTAF\|RODS04\|RODS05\|STAF05\|STAF06\|STAF07\|STAF08\|STAF09\|STAF10\|STAF11\|STAF12\|STAF13\|STAF14\|STAF15\|STAF16\|STAF17\|STAF18\|STAF19\|STAF20\|STAF21\|STAF22\|STAF23\|STAF24\|WASTAFF\|BLAKBLAD\|CARSOMYR\|DEMOSUM4\|DEVA\|DEVAEVIL\|DWSW1H01\|DWSW1H02\|GITH\|GORCAMB\|HSWORD\|KILLSW01\|MARILI\|MISCBC\|PLANETAR\|REAVER\|SW1H03\|SW1H06\|SW1H11\|SW1H15\|SW1H16\|SW1H18\|SW1H19\|SW1H23\|SW1H24\|SW1H30\|SW1H31\|SW1H32\|SW1H33\|SW1H33A\|SW1H33C\|SW1H34\|SW1H35\|SW1H36\|SW1H37\|SW1H38\|SW1H39\|SW1H40\|SW1H41\|SW1H42\|SW1H45\|SW1H50\|SW1H51\|SW1H52\|SW1H53\|SW1H54\|SW1H55\|SW1H60\|SW1H61\|SW1H62\|SW1H63\|SW1H64\|SW1H65\|SW1H67\|SW1H68\|SW1H68A\|SW1H68C\|SW1H69\|SW1H69C\|SW1H70\|SW1H71\|SW1H72\|SW1H73\|SW1H75\|SW1H76\|SW1H77\|SW1H99\|SW1HSEEK\|SW2H03\|SW2H06\|SW2H07\|SW2H08\|SW2H09\|SW2H10\|SW2H11\|SW2H12\|SW2H13\|SW2H14\|SW2H15\|SW2H16\|SW2H17\|SW2H18\|SW2H19\|SW2H20\|SW2H21\|SW2H99\|SW2HDEAT\|TELSWD\|WA2DAK\|WA2S1H\|WANINJA\|WAS2H~
OUTER_SPRINT ~ammos~ ~AROW06\|AROW07\|AROW15\|QUIVER01\|QUIVER03\|BOLT09\|DWBOLT01\|DWBOLT02\|DWBOLT03\|KUOBOLT\|KUOBOLT2\|KUOBOLT3\|QUIVER02\|QUIVER04\|SAHBOLT\|BULL04\|BULL05\|BULL06\|QUIVER05\|QUIVER06\|DART05\|DART08\|DARTMEL\|STARDART~

OUTER_SPRINT ~containers~ ~BAG01\|BAG02\|BAG02B\|BAG02C\|BAG02D\|BAG02E\|BAG02F\|BAG02G\|BAG02H\|BAG02I\|BAG03\|BAG03B\|BAG03C\|BAG03D\|BAG03E\|BAG03F\|BAG03G\|BAG03H\|BAG03I\|BAG04\|BAG05\|BAG06\|BAG06B\|BAG06C\|BAG06D\|BAG19\|BAG19A\|BAG19B\|BAG19C\|BAG19D\|BAG19E\|BAG20\|BAG21\|BAG22\|BAG23\|BAG24\|BAG25\|BAG26\|BAG27\|BAG28\|BAG29\|BAG30\|BAG31\|TBAG01\|TBAG01NA~
OUTER_SPRINT ~other_items~ ~BOTSMITH\|COMPON06\|DAGG10\|DECK\|FIGURE01\|MISC3A\|MISC3A1\|MISC3A2\|MISC3A3\|MISC3A4\|MISC3A5\|MISC3A6\|MISC3A7\|MISC3A8\|MISC3A9\|MISC3C\|MISC3D\|MISC3E\|MISC3H\|MISC3I\|MISC3J\|MISC3K\|MISC3M\|MISC3N\|MISC3O\|MISC3P\|MISC7T\|PLOT02H\|TOME01\|TOME02\|TOME03\|TOME04\|WA2HARP~

//les combiner en un
OUTER_SPRINT ~all_items~ ~%amulets%\|%bracers%\|%cloaks%\|%boots%\|%belts%\|%rings%\|%wands%\|%rods%\|%armors%\|%shields%\|%helms%\|%weapons%\|%ammos%\|%containers%\|%other_items%~

PRINT ~Traitement des zones...~

COPY_EXISTING_REGEXP GLOB ~^BH.+\.are$~ ~override~
  SPRINT ~item2delete~ ~%all_items%~
LAUNCH_PATCH_MACRO ~DELETE_AREA_ITM_ALL~
BUT_ONLY_IF_IT_CHANGES

PRINT ~Traitement des magasins...~

COPY_EXISTING_REGEXP GLOB ~^BH.+\.sto$~ ~override~
  SPRINT ~item2delete~ ~%all_items%~
LAUNCH_PATCH_MACRO ~DELETE_STORE_ITM_ALL~
BUT_ONLY_IF_IT_CHANGES

PRINT ~Traitement des créatures...~

COPY_EXISTING_REGEXP GLOB ~^BH.+\.cre$~ ~override~
  SPRINT ~item2change~ ~%all_items%~
SET f_add = ~%f_add_nostdr%~ //non volable, non récupérable
LAUNCH_PATCH_MACRO ~ADD_CRE_ITM_FLAGS_ALL~
BUT_ONLY_IF_IT_CHANGES
Script complet dans ce [POST=310088]message[/POST]

Mais peut-être n'ai-je rien compris à l'énoncé initial ?

Haplo74

Posté : mer. 23 mars 2016, 23:45
par Isaya
Deratiseur voulait installer des fichiers propres à son mod, en les renommant au moment de la copie pour remplacer la terminaison B du nom par la terminaison C, sans doute pour utiliser la même image pour deux choses différentes. Mais dans le dernier code il a finalement choisi de faire l'inverse.
COPY_EXISTING nécessite que les fichiers existent dans le jeu, soit dans un fichier BIF, soit dans override. Cela ne peut pas convenir ici.

Posté : jeu. 24 mars 2016, 19:00
par Haplo74
Isaya a écrit :Deratiseur voulait installer des fichiers propres à son mod, en les renommant au moment de la copie pour remplacer la terminaison B du nom par la terminaison C, sans doute pour utiliser la même image pour deux choses différentes. Mais dans le dernier code il a finalement choisi de faire l'inverse.
COPY_EXISTING nécessite que les fichiers existent dans le jeu, soit dans un fichier BIF, soit dans override. Cela ne peut pas convenir ici.
OK pour la différence COPY et COPY_EXISTING.
Mais n'existe-t-il pas le pendant COPY_REGEXP dans ce cas (pour REGular EXPression) et permettant de tout faire nativement (avec souvent des syntaxes bien alambiquées il faut le reconnaître) ?

Haplo74

Posté : jeu. 24 mars 2016, 23:53
par Isaya
Il n'existe pas de COPY_REGEXP, pour une bonne raison, le principe REGEXP est basé sur le contenu existant du jeu. Il existe une option GLOB de COPY pour indiquer une utilisation d'expression régulière s'appliquant sur les fichiers du disque.
A COPY command may use globbing to expand filename wildcards with respect to files on the host filesystem. Unlike COPY_EXISTING_REGEXP, glob wildcards do not range over game resources. Instead, they range over physical files actually on the disk.
Mais il y a une mise en garde :
Use local filesystem globbing. Globbing is generally architecture specific!
Elle fonctionne également quasi indispensable avec COPY_EXISTING_REGEXP d'ailleurs, car elle a un impact majeur pour les mods (cf la documentation WeiDU) pour "glob") :
To put it another way: if you do not specify GLOB with COPY_EXISTING, WeiDU pretends that the override directory contains 0 files that are not in CHITIN.KEY.