Benutzerdefinierte Variablen / Felder für Einheiten? [abgeschlossen]

Gibt es eine Möglichkeit, neue / benutzerdefinierte Variablen mit Einheiten zu verknüpfen?

Es gibt zwei Trigger, die ich auf eine Einheit anwenden möchte.

  • Der erste Auslöser, der auf einer Einheit aufgerufen wird, sollte die ihm zugewiesene aktuelle Bestellung überprüfen und sich an das Auftragsziel (von Typ unit oder integer (Unit ID) erinnern)
  • Zweiter Auslöser, der auf der gleichen Einheit auftritt, sollte sich an den Wert erinnern und etwas damit machen. Aber wenn der zweite Auslöser auftritt, existiert die alte Ordnung nicht mehr.

Es gibt UnitSetCustomValue , aber dieses funktioniert auf Real Typen und nicht int oder unit . Ich kann keine Unit-ID darin speichern, weil ich die Präzision verliere.

  • Warum macht jeder 9-Overlord, nicht 10-Overlord?
  • Wie benutze ich ordnungsgemäß vor und nach dem Bau / baneling Geschwindigkeit?
  • Sind irgendwelche Upgrade-Optionen dauerhaft wie in Flügel der Freiheit?
  • Stack in StarCraft II Verbesserung
  • Was bedeutet es, Kartensteuerung zu haben?
  • Warum wird Zerg hinter sich gelassen, wenn sie nicht mehr Basis haben als ihr Gegner?
  • One Solution collect form web for “Benutzerdefinierte Variablen / Felder für Einheiten? [abgeschlossen]”

    Sie können Datentabellen verwenden, indem Sie die Einheiten-Tags verwenden, um "erstellen" zu erstellen und beliebige Felder zu verwalten.

    • Datentabelle – ist ein String -> Any hashmap. Sie können jeden Wert des eingebauten Typs darin speichern.

      Es gibt eine global und eine local Datentabelle. Sie brauchen die globale, um die Werte anhalten zu lassen.

    • Unit-Tag – ist eine eindeutige ID-Integer, die mit jeder Einheit verknüpft ist

    Wenn Sie also ein benutzerdefiniertes Feld "FooBar" mit einer Einheit mit gegebener ID verknüpfen möchten, können Sie "{ID} FooBar" in der Datentabelle speichern und später abrufen. Betrachten Sie die Verwendung von Helper-Funktionen / Aktionen, um das zu verwalten:

     (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) ) 

    Ein ähnlicher Satz von Getter / Setter kann für andere Typen, zB Einheiten, definiert werden.

    Es ist nicht der schnellste Weg, es zu erreichen, aber es funktioniert. Es wäre toll, wenn man eine Einheit zerstört, löscht man die nicht mehr benötigten Einträge. Sonst bekommst du ein Speicherleck.