Page 1 sur 1

[EFFET] L'effet #309 (Script: Set/Modify Local Variable) crée deux variables !

Posté : ven. 28 juin 2013, 21:57
par Freddy_Gwendo
Je viens de tomber sur un truc bizarre.

J'utilise cet effet avec "Modifier Type" = 1 ("If the Modifier Type is set to 1, then this effect will be a Modify Local Variable effect.") pour modifier une variable locale du perso qui utilise un objet.

Tout fonctionne parfaitement : la variable est renseignée, augmentée ou diminuée selon la valeur de la variable.

Sauf que...

En allant étudier une sauvegarde, je me suis aperçu que l'effet créait aussi une variable du même nom, mais en GLOBAL. De plus, si j'utilise deux fois l'effet augmentant la variable de 100, la variable locale est effectivement incrémentée de 200, mais la variable globale est égale à 100. En fait, elle se comporte comme si j'avais saisi SetGlogal("Variable";"GLOBAL";valeur) et ne conserve que la valeur du dernier effet lancé.

Aurais-je loupé une option cachée quelque part ? Pourtant, j'ai vérifié et re-vérifié : rien ne semble clocher dans mon effet.

A priori, ça n'empêche pas la gestion des variables puisque je ne m'intéresse qu'aux variables locales, mais ça me gonfle de ne pas comprendre pourquoi cette double création (alors qu'il existe l'effet Script: Set Global Variable [265] pour travailler sur les variables globales) ; et surtout de créer des variables globales inutiles. :(

Posté : ven. 28 juin 2013, 22:43
par Isaya
Le texte descriptif comporte un mot qui est en trop ou qui laisse supposer qu'il manque une partie de la phrase :
Set both the local variable specified by the resource key to the value specified by the 'Value' field.
Ce "both" laisser supposer qu'il y a un deuxième élément impacté de la même manière que la variable locale. Qui sait, peut-être une globale ?

Après un peu d'archéologie, voici ce qu'indiquait IESDP à ses débuts en 2002 :
It could be modify Local Variable. It is used in SPIN579 with Param #1 set to 1 (i think it's the modifier int, could be + ou -), Param #2 set to 1 (no idea about this one, i have tried 0, 2 and 3 but the spell doesn't work) and the resource is the name of the Local Variable (here KOBAMP_N). The caster is KOBAMP01.CRE, the "receiver" is KOBSOU01.CRE. Check its general script (kobsou01.bcs)
Ce n'est pas une réponse, mais ça peut t'indiquer un exemple dans le jeu.

Voici la description de juillet 2005 :
Parameter #1: Value
Parameter #2: Modifier Type
Description:
Set both the local and global variable specified by the resource key to the value specified by the 'Value' field.

If the Modifier Type is set to 1, then this effect will be a Modify Local Variable effect.

NB: Since the Resource Key can only be 8 characters long maximum, you can not set a variable with this Effect this
has a name longer than this amount.
You can use the VVC field of external EFF files for an additional 8 characters of variable name.
You can use the 3rd resource field of EFF files for an additional 8 characters.
Tiens donc ! On a gagné depuis la distinction entre fixer et incrémenter mais perdu la notion de variable globale. Peut-être que la modification de variable globale ne s'effectue que dans un des deux cas, d'où la suppression de la notion de variable globale.

Cela dit, j'ai l'impression que la phrase que tu as cité dénote une version un peu ancienne d'IESDP (comme ci-dessus). La plus récente décrit le 1 comme servant à incrémenter la variable tandis que 0 sert à la fixer.

Posté : ven. 28 juin 2013, 23:15
par Freddy_Gwendo
Intéressant tout ça !

Manifestement, cet effet crée deux variables : locale et globale. Ce qui est confirmé par les anciennes définitions.
En revanche, ça n'explique pas pourquoi avec le même type, les variables locales sont modifiées et les variables globales réinitialisées.

Par ailleurs, je travaille sur le dernier DLTCEP et il me semble que mes fichiers dat sont à jour...
Voici la description exacte de l'effet dans DLTCEP :
Set the local variable specified by the resource key to the value specified by the 'Value' field.

If the Modifier Type is set to 1, then this effect will be a Modify Local Variable effect.

NB: Since the Resource Key can only be 8 characters long maximum, you can not set a Local Variable with this Effect this has a name longer than this amount.
You can use the VVC field of external EFF files for an additional 8 characters of variable name.
You can use the 3rd resource field of EFF files for an additional 8 characters.
et dans IESDP :
Parameter #1: Value
Parameter #2: Type
Description:

Set both the local variable specified by the resource key to the value specified by the 'Value' field.

Known values for 'Type' are:
0 Set Local (to 'Value')
1 Increment Local (by 'Value')

NB: Since the Resource Key can only be 8 characters long maximum, you can not set a variable with this Effect this has a name longer than this amount.
You can use the VVC field of external EFF files for an additional 8 characters of variable name.
You can use the 3rd resource field of EFF files for an additional 8 characters.
Je vais donc vérifier si j'ai installé les bons fichiers.

Posté : sam. 29 juin 2013, 10:42
par Freddy_Gwendo
En farfouillant dans les archives de IESDP, je suis tombé sur ce sujet qui "reprend" mes interrogations sur la double création de variables et la confirme.

Daté d'avril à juin 2005, il doit expliquer en partie la modification de la description de l'effet que tu as pointée.

En revanche, toujours rien sur la différence de modification des variables locales et globales...

Posté : mer. 17 juil. 2013, 04:42
par Freddy_Gwendo
Pour clore le sujet, j'ai eu confirmation par Argent77 que cet effet provoquait bon nombre d'actions collatérales, dont la création d'une variable globale du même nom.

Il semble qu'il n'y ait pas grand chose à faire, si ce n'est à bien gérer ses noms de variables pour ne pas foutre le binz dans le codage...

Sinon, l'effet #185 gère l'action SetGlobal("Variable","LOCALS",valeur), sans création de variable globale, mais ne permet pas de modifier une variable éxistante (l'augmenter ou la diminuer).

Si ça peut servir....