Existe-t-il un moyen d'associer des variables nouvelles / personnalisées à des unités?
Il y a deux déclencheurs que je souhaite postuler sur une unité.
unit
de type ou de l' integer
(ID de l'unité)) Il existe UnitSetCustomValue
, mais celui-ci fonctionne sur des types Real
et pas int
ou unit
. Je ne peux pas stocker l'ID de l'unité car je perds la précision.
Vous pouvez utiliser les tableaux de données à l'aide des balises d'unité pour "créer" et gérer des champs arbitraires.
Tableau de données – est une String -> Any
hashmap. Vous pouvez stocker n'importe quelle valeur de type intégré.
Il existe un tableau de données global
et un local
. Vous avez besoin du global pour rendre les valeurs persistantes.
Donc, si vous voulez un champ personnalisé "FooBar" associé à une unité avec un identifiant donné, vous pouvez enregistrer "{ID} FooBar" dans la table de données, puis l'extraire. Envisagez d'utiliser des fonctions / actions d'aide pour gérer cela:
(Action Definition) StoreIntWithUnit Parameters owner <unit> fieldname <string> value <int> Local Variables ID = <int> UnitGetTag(owner) Actions DataTableSetInt(true, CombineString(IntToString(ID), fieldname), value) (Function Definition) GetIntWithUnit Return Type: <int> Parameters owner <unit> fieldname <string> Local Variables ID = <int> UnitGetTag(owner) Actions Return( DataTableGetInt(true, CombineStrings(IntToString(ID), fieldname) )
Un ensemble similaire de getters / setters peut être défini pour d'autres types, par exemple des unités.
Ce n'est pas le moyen le plus rapide d'y parvenir, mais cela fonctionne. Il serait formidable que, lorsqu'une unité soit détruite, vous supprimez les entrées non requises; Sinon, vous obtenez une fuite de mémoire.