Variables / champs personnalisés pour les unités? [fermé]

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é.

  • Le premier déclencheur, invoqué sur une unité, vérifie l'ordre actuel qui lui est attribué et rappelez-vous la cible de commande (de l' unit de type ou de l' integer (ID de l'unité))
  • Le deuxième déclencheur sur la même unité devrait rappeler la valeur, et faire quelque chose avec elle. Mais lorsque le deuxième déclencheur se produit, l'ancien ordre n'existe plus.

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.

  • Unit Tag – est un entier d'ID unique associé à chaque unité

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.