Page 1 sur 1

DEFINE_PATCH_FUNCTION foiré

Posté : mar. 29 oct. 2024, 09:29
par deratiseur
j'essaie de créer un DEFINE_PATCH_FUNCTION pour simplifier une instruction répétée 120 fois :

Code : Tout sélectionner

DEFINE_PATCH_FUNCTION PX_INTERPLAN_SORTS STR_VAR parchemin = ~~
	BEGIN
	COPY_EXISTING ~pxagenob.sto~	~override~  ADD_STORE_ITEM %parchemin% LAST #1 #0 #0 ~IDENTIFIED~ #5
	END
Pour l'appeler comme ça : LPF PX_INTERPLAN_SORTS INT_VAR parchemin = pxf2ex2a END



Sauf que weidu bloque systématiquement sur le DEFINE_PATCH_FUNCTION :

[DERATS_MAGASIN_2/SETUP-DERATS_MAGASIN_2.TP2] PARSE ERROR at line 1941 column 8-20
Near Text: COPY_EXISTING
GLR parse error

Pourquoi ? Une fonction ne peut pas être une COPY ?

Re: DEFINE_PATCH_FUNCTION foiré

Posté : mar. 29 oct. 2024, 09:39
par Selphira
COPY est une instruction de type ACTION, et tu tentes de la lancer dans un contexte de PATCH.

Je connais 2 solutions :

Englober ton COPY_EXISTING dans une instruction INNER_ACTION

Code : Tout sélectionner

INNER_ACTION BEGIN
   COPY_EXISTING ~pxagenob.sto~	~override~  ADD_STORE_ITEM %parchemin% LAST #1 #0 #0 ~IDENTIFIED~ #5
END
Créer une méthode DIMORPHIC

Code : Tout sélectionner

DEFINE_DIMORPHIC_FUNCTIONPX_INTERPLAN_SORTS STR_VAR parchemin = ~~
BEGIN
	COPY_EXISTING ~pxagenob.sto~	~override~  ADD_STORE_ITEM %parchemin% LAST #1 #0 #0 ~IDENTIFIED~ #5
END

Re: DEFINE_PATCH_FUNCTION foiré

Posté : mar. 29 oct. 2024, 10:01
par deratiseur
OK, avec

Code : Tout sélectionner

DEFINE_DIMORPHIC_FUNCTION PX_INTERPLAN_SORTS STR_VAR parchemin = ~~
ça se compile.

Mais l'instruction

Code : Tout sélectionner

LPF PX_INTERPLAN_SORTS INT_VAR parchemin = pxf2ex2a END
Refuse de fonctionner, bloque sur "ERROR: cannot convert pxf2ex2a or %pxf2ex2a% to an integer"

j'ai essayé en ajoutant/enlevant des % et des ~ mais je n'y arrive pas. Comment ai-je pu programmer des mods en étant autant bidon avec Weidu, ça me dépasse....

Re: DEFINE_PATCH_FUNCTION foiré

Posté : mar. 29 oct. 2024, 10:13
par Selphira
C'est normal, dans la définition de la fonction tu utilises STR_VAR tandis qu'à l'appel tu utilises INT_VAR, remplace le par STR_VAR et ça devrait aller.

Re: DEFINE_PATCH_FUNCTION foiré

Posté : mar. 29 oct. 2024, 10:49
par deratiseur
Ok, ça marche. Je te remercie. Que ferais sans toi ? (et sans JohnBob, FreddyGwendo, Zranoff et d'autres.... je suis dépendant des autres :( )

Re: DEFINE_PATCH_FUNCTION foiré

Posté : mar. 29 oct. 2024, 11:36
par deratiseur
Heu non, en fait ça s'installe mais c'est complètement foiré. Tous les entrées dans le magasin ont comme nom d'objet PARCHEMI et le paramètre "timer" calé à 78 (ça doit être le patchage pour le N manquant^^). Où est-ce que ça foire ?
Testé, ça ne marche pas mieux en remplaçant
LPF PX_INTERPLAN_SORTS INT_VAR parchemin = pxf2ex2a END
par
LPF PX_INTERPLAN_SORTS INT_VAR parchemin = %pxf2ex2a% END

Re: DEFINE_PATCH_FUNCTION foiré

Posté : mer. 30 oct. 2024, 07:25
par deratiseur
Bon, oubliez ça, j'ai fais autrement (comme d'habitude). Sujet clot. merci encore Selphira.

Re: DEFINE_PATCH_FUNCTION foiré

Posté : jeu. 31 oct. 2024, 05:13
par deratiseur
De retour. Je ne comprend pas. Mon fichier "final" (pxl2rpt0.2da) incluant 9 autres fichiers est fini, ça ça marche. Mais pourquoi avec 10 instructions "COPY" il n'y a que deux fichiers qui sont copiés ?

En l'occcurance les deux fichiers copiés sont le pxl2rpt0.2da, le fichier final construit à partir des 9 autres (et ça ça marche, merci encore Selhira) et celui du dernier bloc, le pxl2rpt9.2da. Où sont passé les 8 premiers fichiers ?

Voilà le code final :
Rupture.tph
(4.14 Kio) Téléchargé 16 fois
Rien de plus simple, c'est le même bloc répété 9 fois avec chaque fois un fichier différent. Alors WTF ?

-----------------------------------------------

Et autre truc bizarre : si j'inverse les blocs pour qu'ils commencent par les sorts de niveau 9 pour finir par les sorts de niveau 1 ça ne s'installe plus.....
ERROR: [Derats_Magasin_2/Sorts/Special/pxl2rpt9.2da] -> [override/pxl2rpt9.2da] Patching Failed (COPY) (Failure("ERROR: READ_2DA_ENTRY_FORMER failed on variable %rows_43_2%"))
Ça refuse de s'installer dans l’ordre décroissant mais ça s'installe dans l'ordre croissant. WTFFFFFF ?

on, comme je sens que ça va être nécessaire voilà les 9 fichiers :
Special.zip
(9.95 Kio) Téléchargé 14 fois

Re: DEFINE_PATCH_FUNCTION foiré

Posté : jeu. 31 oct. 2024, 06:46
par Selphira
Si tu veux que les fichiers .2da originaux soient aussi copié, et pas seulement utilisé pour construire le fichier pxl2rpt0.2da, il faut enlever les instructions BUT_ONLY, qui signifient "copie le fichier, uniquement si des modifications ont été apportées à son contenu". Comme dans ce cas tu ne fais que lire, aucune modification n'est faite, la copie n'est pas réalisée.

Pour pxl2rpt9.2da, BUT_ONLY n'est pas présent, il l'a donc copié

Re: DEFINE_PATCH_FUNCTION foiré

Posté : jeu. 31 oct. 2024, 07:47
par deratiseur
OK, merci. J’apprends petit à petit sur weidu, mais pfff, la galère. Et pour l'ordre décroissant, tu as une explication logique ?

Re: DEFINE_PATCH_FUNCTION foiré

Posté : jeu. 31 oct. 2024, 07:55
par Selphira
Dans ton fichier pxl2rpt9.2da, il y a une ligne qui n'a que 2 colonnes

Code : Tout sélectionner

INTERPLAN_ALABASTINES_DWEOMERIC_MELTER	PXL2PQD
Comme tu lis ce fichier avec l'instruction suivante, Weidu décide qu'une ligne est valide si elle a au moins 2 colonnes

Code : Tout sélectionner

READ_2DA_ENTRIES_NOW ~rows~ 2
Sauf que plus loin, tu tentes de lire 3 colonnes !

Code : Tout sélectionner

READ_2DA_ENTRY_FORMER ~rows~ row 0 sort
READ_2DA_ENTRY_FORMER ~rows~ row 1 ref
READ_2DA_ENTRY_FORMER ~rows~ row 2 trois
Pour corriger ce problème, déjà indiquer qu'une ligne n'est valide que si elle possède au moins 3 colonnes

Code : Tout sélectionner

READ_2DA_ENTRIES_NOW ~rows~ 3
L'erreur n'apparaitra plus, mais ta ligne ne sera pas ajoutée, il faut donc aussi corriger la ligne de ton fichier pxl2rpt9.2da afin de lui ajouter la 3ème colonnes

Re: DEFINE_PATCH_FUNCTION foiré

Posté : jeu. 31 oct. 2024, 08:25
par deratiseur
Je te remercie, encore une fois tu me sauve. j'ai donc maintenant un sort qui peut potentiellement donner le choix entre 658 sorts ^^ (et encore, il faut que j'indexe B_spells)

Mais pourquoi ça ne buguait pas quand je demandait l'ordre de 1 à 9 ? Pourtant la ligne à deux colonne n'est pas à la toute fin du fichier, elle est au milieu. Ça aurait du rendre une erreur, non ?

Re: DEFINE_PATCH_FUNCTION foiré

Posté : jeu. 31 oct. 2024, 09:45
par Selphira
C'est du à la façon dont Weidu stocke les tableaux, j'ai eu pas mal de prises de tête avec eux lors du développement d'AutoDescription.

En fait, l'un de tes fichiers .2da lus précédemment avait l'entrée %rows_43_2%" valide, Weidu a gardé cette information et ne l'a pas supprimée lors de la lecture des fichiers suivants.
Tu aurais pu avoir l'erreur si avant l'instruction READ_2DA_ENTRIES_NOW ~rows~ 2 , tu aurais vidé le tableau avec CLEAR_ARRAY rows

DavidW l'explique plus en détail ici : https://gibberlings3.github.io/Document ... rse_2.html (recherche "Because of how WEIDU stores arrays")

Re: DEFINE_PATCH_FUNCTION foiré

Posté : jeu. 31 oct. 2024, 18:06
par deratiseur
Ok, merci. Weidu ça reste vraiment du charabia pour moi. Je me demande comment vous avez tous cette capacité de comprendre comment manipuler si intensément cet outil exotique. (Freddy Gwendo c'est pointé un jour et s'est mis à pondre des codes monstrueux qui ont aidé toute la communauté. Zranoff, bien avant ça, c'est pointé un jour sur le forum Légende et a distribué à la demande des scripts weidus complexes quelques jours plus tard...)
Peut être que quelques notions de programmation en c où je ne sais quel autres truc aiderait. Je suis trop "ancien" pour ça, moi j'ai appris pendant mes années lycée le Visual basic ^^